前提
ある実験データを用いた計算結果を極座標変換して等高線を表示したいと考えています。しかしまだ初学者であるため、まず係数などをでっちあげたものを極座標表示できるように練習しようと考えています。
実現したいこと
クラスを設定して表示した極座標グラフを複数重ねて等高線表示したい
発生している問題・エラーメッセージ
クラスで行った場合の複数グラフの重ね方がわからない
該当のソースコード
python
1class Complex: 2 import math, matplotlib.pyplot as plt, numpy as np 3 def comp( self, r, d ): 4 return self.rnd( r * self.math.cos( self.math.radians(d) ) ), self.rnd( r * self.math.sin( self.math.radians(d) ) ) 5 6 def rnd( self, n, keta=-3 ): 7 return ( n // 10**keta ) * 10**keta 8 9 def plot( self, f ): # f = f(d) = r 10 xs, ys = [], [] 11 for i in range( 361 ): 12 try: 13 x, y = self.comp( f( self.math.radians(i) ), i ) 14 xs.append( x ) 15 ys.append( y ) 16 except: 17 pass 18 self.plt.figure( figsize=( 5, 5 ) ) 19 self.grid_plot( max(xs), max(ys) ) 20 self.plt.plot( xs, ys ) 21 return None 22 23 def grid_plot( self, x_m, y_m ): 24 z = self.math.sqrt( x_m**2 + y_m**2 ) 25 z_count = 0 26 dr = 10**(int( self.math.log( z, 10 ))) 27 while True: 28 if( z_count > z ): 29 break 30 xs, ys = [], [] 31 for i in range( 361 ): 32 x, y = self.comp( z_count, i ) 33 xs.append( x ) 34 ys.append( y ) 35 self.plt.plot( xs, ys, c='#dddddd' ) 36 z_count += dr 37 ds = [ 30, 45, 60, 120, 135, 150 ] 38 for d in ds: 39 x, y = self.comp( z, d ) 40 self.plt.plot( [ -1*x, x ], [ -1*y, y ], c='#dddddd' ) 41 self.plt.plot( [ 0, 0 ], [ -1*z, z ], c='#ff9999' ) 42 self.plt.plot( [ -1*z, z ], [ 0, 0 ], c='#ff9999' ) 43 return None 44 45comp = Complex() 46comp.plot(lambda d:3*(1+comp.math.cos(d)+comp.math.sin(d)+comp.math.cos(2*d)+comp.math.sin(2*d))) 47comp.plot(lambda d:6*(1+comp.math.cos(d)+comp.math.sin(d)+comp.math.cos(2*d)+comp.math.sin(2*d))) 48 49 # 修正案1 start --------------------------- 50 def plot1( self, *args): 51 xs, ys = [], [] 52 for i in range( 361 ): 53 try: 54 x, y = self.comp( *args( self.math.radians(i) ), i ) 55 xs.append( x ) 56 ys.append( y ) 57 except: 58 pass 59 60 61 self.plt.figure( figsize=( 5, 5 ) ) 62 self.grid_plot( max(xs), max(ys) ) 63 64 65 66 # 複数描写するには追加でplotをすればよい 67 self.plt.plot( xs, ys ) 68 69 # ★確認の為追加、不要なら削除 70 self.plt.show() 71 72 73 return None 74 # 修正案1 end ---------------------------
試したこと
クラスを利用したのが初めてなので正直ちんぷんかんではあります。
一旦て計算で出した式が3r(1+cosθ+sinθ+cos2θ+sin2θ)であったのでrの値を複数変えて重ねることによって等高線表示できないか考えました。しかし実行したところ(今回だと最後の二つ)、二つグラフが出てくる結果になったためクラスの内容を変える必要があると考えています。
補足情報(FW/ツールのバージョンなど)
修正案1の追加
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/01 01:41 編集
2022/12/01 02:27
2022/12/02 08:24 編集