前提
pythonで級数展開法におけるフーリエベッセルを用いた基底関数を求めようとしています。
基底関数を表した図を作る必要があるのですが極座標での表示がうまくいきません。
実現したいこと
xy座標系で表している現在の図を極座標系の図に変換したい
発生している問題・エラーメッセージ
xy座標系から虚構座標系にうまく変換されない
該当のソースコード
Python
1import numpy as np 2import matplotlib.pyplot as plt 3from scipy.special import jv 4 5fig = plt.figure() 6ax1 = fig.add_subplot(111) 7x = np.linspace(0, 4, 20) #等間隔で値を0~4まで20個作成 8y = np.linspace(0, 2*np.pi, 20) #等間隔で値を0~360まで20個作成 9x, y = np.meshgrid(x, y) #x,yからメッシュグリッドを作成 10def fz(x,y): #高さデータzを作る関数fz定義 11 return jv(1,x)*np.cos(y) 12z = fz(x,y) 13 14 15for d in range(360): 16 x1 = x*np.cos(np.radians(d)) 17 y1= y*np.sin(np.radians(d)) 18 19ax = plt.contour(x1,y1,z,colors='black') #等高線表示 20ax.clabel(fmt='%1.1f', fontsize=16) #等高線の値を表示 21ax = plt.contourf(x1,y1,z,cmap='rainbow') #等高線レベルに応じて色を塗る 22ax = plt.colorbar(label="contour level") #カラーバー表示 23plt.show() 24 25#x=rcosθ 26#y=rsinθ 27print(x1[0]) 28print(x[0])
試したこと
このコードではzの値を調べるためにxをr、yをθとして扱っています。そのままrとθをxy座標系でプロットすると図1のようになりました。目的は図2のような図を作ることです。
物理的にはxy座標系の関係は合っていそうなのであとはどのように極座標を適用するかであると考えています。私はx1=rcosθ、y1=rsinθとおいてその座標を適用させればいいのではと考えましたが、うまくいかず、x1の内容とxの内容を確認したところ、値がさほど変わっておらず、for文に問題があるのではと考えましたがどこがどのように問題なのか検討がつかない状態です。
図1
図2
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー