ファイルを指定して極座標系でグラフを描き、画像に出力するまでをやります。
目次
- 作業環境
- CSV
- 極座標系
- ファイルのインポート
作業環境
- anaconda 1.7.2
- python 3.7.3
- vscodeとexcel
jupyter notebookというIPythonを使用します。
jupyter notebook
jupyter notebook はサーバを立ててwebブラウザ上で文章を表示させるものです。 テキストエディタと同じ感覚で使用でき、IPythonの機能であるコードの解説の表示や図を含む実行結果をまとめて表示できます。
図を描くときは、実行してすぐ図を確認できるjupyterが楽です。anacondaをインストールするとまとめてインストールしてくれます。
CSV
csvって何
カンマで区切られた数値です。
VS code上で見やすく
csvはカンマで区切られているだけのデータなので見にくいです。そこで私が使っているvscode拡張機能を紹介します。
Rainbow CSV

Excel VIewer

ファイルを右クリックかcommand palletでpreviewが見れます。

極座標系の表示
=>matplotlib.pyplot.polar -matplotlib
import matplotlib.pyplot as plt
import numpy as np
r = 1
theta = 45
theta_rad = np.deg2rad(theta)# 角度をradに変換
ax=plt.subplot(projection="polar") #軸を表示
ax.scatter(theta_rad, r, c="red", s =15)
theta = np.arange(0.0, 4*2*np.pi, 0.01) #角度
r = 0.5*theta #半径
plt.polar(theta,r) # 極座標グラフのプロット
plt.savefig('PolarCoordinate.png')
plt.show()

subplotについて
fig.add_subplot(行,列,場所)を表します。(1,2,1)では列が(つまり縦方向に)半分になったグラフのうち1つめ(上側)が1つ表示されるらしいです。
import matplotlib.pyplot as plt
fig = plt.figure()
fig.add_subplot(1,2,1)
plt.show()

fig.add_subplot(1,2,1)

ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

ファイルのインポート
使っているデータは私が他の目的で作ったデータを適当に弄った意味のない数値列です。
import pandas as pd
df = pd.read_csv('fact_x2.csv')
print(df)
turn[] length[mm] total [mm] radius[mm] deg[deg] \
0 0 0.00 0.00 0.0000 0.000000 NaN
1 1 11.45 11.45 7.4000 88.653605 NaN
2 1 0.45 11.90 7.4000 92.137808 NaN
3 1 11.45 23.35 7.4000 180.791412 NaN
~割愛~
117 17 16.10 854.45 9.4496 52.276096 NaN
118 17 1.15 855.60 9.4496 59.248893 NaN
119 17 16.10 871.70 9.4496 156.868057 NaN
[120 rows x 10 columns]
import pandas as pd
df = pd.read_csv('fact_x2.csv')
print(df['turn[]'])
0 0
1 1
2 1
3 1
~割愛~
117 17
118 17
119 17
Name: turn[], Length: 120, dtype: int64
指定できるのは行(Colum)。 横に伸びてる方です。
与える角度はdegじゃなくてradですので注意。
完成
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.read_csv('fact_x2.csv')
r = df['Radius[mm]']
deg = df['Deg[deg]']
radian = np.deg2rad(deg)
fig = plt.figure(figsize=(10, 10))#新しい図面
ax = fig.add_subplot(111, projection='polar')#軸の表示
ax.plot(radian,r, '-o')
i=2
while i < 122:
ax.plot([radian[i],radian[i-1]],[r[i], r[i-1]], 'or-')
i +=2
print(np.pi)
plt.savefig('PolarCoordinate.png')
plt.show()

関数化
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
"""
CSVファイルから極座標系のグラフをプロットする
入力:(CSVファイル名, 出力画像ファイル名,半径、角度)
出力:出力画像ファイル名.png
"""
def polar(in_file,out_file,param_r,param_theta):
df = pd.read_csv(in_file) #ファイル読み込み
r = df[param_r]
deg = df[param_theta]
radian = np.deg2rad(deg) #deg をradに変換
Len=len(r)#配列の長さを取得
fig = plt.figure(figsize=(10, 10))#新しい図面
ax = fig.add_subplot(111, projection='polar')#軸の表示
ax.plot(radian,r, '-o')
i=2
while i < Len: #1つ飛ばしどうしを赤線で結ぶ
ax.plot([radian[i],radian[i-1]],[r[i], r[i-1]], 'xr-')
i +=2
plt.savefig(out_file)
plt.show()
polar('test.csv','Polar_test.png','Radius[mm]','Deg[deg]')

雑記
進捗がない!!!!!!!!!!!
[追記](2019/9/19)「完成」のコードを変更しました