ちょいめも

物理/Python/Cの雑記帳

直交座標の強度マップを極座標の強度マップに変換

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
import matplotlib.cm as cm

data = np.loadtxt('data.csv', delimiter=',') #z value
data_x = np.loadtxt('xy.csv', delimiter=',')[:,0] #x座標
#極座標グラフと合わせるために、y座標はxyグラフでいうところの下が負になるようにするために反転
data_y = np.loadtxt('xy.csv', delimiter=',')[:,0][::-1] #y座標

#線形補間
f_r = interpolate.interp2d(data_x, data_y, data, kind='linear')

t = np.linspace(0, 2*np.pi, 100) #theta
r = np.linspace(0, data_x.max(), 100) #r 半径
T, R = np.meshgrid(t, r) #メッシュ
# np.savetxt('Theta_R.csv', np.vstack((t,r)).T, fmt='%0.3f', delimiter=',')

# f_r(r*np.cos(t), r*np.sin(t))で入力すると昇順にソートされてしまうのでリスト内包表記で処理する
Z = np.array([[f_r(i*np.cos(j), i*np.sin(j))[0] for j in t] for i in r])
# np.savetxt('Z_polar.csv', Z, fmt='%0.3f', delimiter=',')

#1D
deg1 = 0
Z_1d_1 = np.array([f_r(i*np.cos(deg1*np.pi/180), i*np.sin(deg1*np.pi/180))[0] for i in data_x])
#np.savetxt('rz.csv', np.vstack((data_x,Z_1d)).T, fmt='%0.3f', delimiter=',')
deg2 = 90
Z_1d_2 = np.array([f_r(i*np.cos(deg2*np.pi/180), i*np.sin(deg2*np.pi/180))[0] for i in data_x])


ax = plt.subplot(211, polar=True)
ctf = ax.contourf(T, R, Z, 100, cmap=cm.jet)
colb = plt.colorbar(ctf, pad=0.15,orientation="vertical")

#1D
ax = plt.subplot(212)
ax.plot(data_x, Z_1d_1)
ax.plot(data_x, Z_1d_2)

plt.show()