私が望むようにプロットの書式を設定する単純なPython matplotlibプロットクラスを作成しようとしています。これを行うには、クラスとサブクラスを使用しています。親は軸と図形を生成し、私が望むすべての軸のプロパティを設定します。 child
は、プロット自体(散布図、線など)を生成し、プロットを出力ファイルに保存します。ここでPython継承継承親でプロットプロパティを設定した後にプロットを作成するのに適している
は(プロット自体はthis codeに基づいています)私はこの質問の目的のために出ているものです:
import matplotlib.pyplot as plt
import numpy as np
class myplot():
def __init__(self,dims,padd):
self.fig = plt.figure(figsize=(8.5, 11))
self.ax = self.fig.add_axes(dims)
self.pad = padd
def ax_prop(self):
self.ax.set_axisbelow(True)
self.ax.tick_params(axis='x', pad=self.pad, which='both')
class plotter(myplot):
def __init__(self,dims,padd,x,y):
myplot.__init__(self,dims,padd)
self.x = x
self.y = y
def mk_p(self):
self.ax.plot(self.x, self.y, linestyle = '-')
plt.savefig('Outfile.png', facecolor=self.fig.get_facecolor(), dpi = 300)
plt.show()
if __name__ == "__main__":
x = np.arange(0.0, 2.0, 0.01)
y = np.sin(2*np.pi*x)
propr = [0.60, 0.2, 0.2, 0.25]; padding =5
plt_instance = myplot(propr,padding)
plt_instance.ax_prop()
pl_d = plotter(propr,padding,x,y)
pl_d.mk_p()
私は次のようにこれをベースに抱き合わせている:
The child must have all the properties of the parent.
したがって、child
クラスplotter()
は継承しなければなりません:
ax, and all its customized properties
fig
親(
myplot()
)クラスからの
。以下はChild
クラスに変更することができる: - 等散布、線、
- タイプ等
markersize
、linestyle
、
しかしmatplotlib
数字と軸のオブジェクト(fig
、ax
)は、数字の入力セットをプロットする前に常に必要になります。
質問:
これは、Pythonの継承の正しい使い方ですかこの場合、余分な子クラスがありますか?もしそうなら、サブクラスの推論がオブジェクト指向プログラミングと一貫していない場所がありました(私はこれを自信を持って納得させることができません)。
Figureを作成する関数とそれを描画する2番目の関数を作成するだけではどうですか。一般的には、構成から継承を選ぶべきです。継承は、 "is a"な関係を意味するはずです。 「プロッタ」は「マイプロット」ですか? –
いいえ、それはありません。うん、それは私の質問にかなり答える。 –
返事をありがとう。基本的にここで説明しました。私はこのコンセプトを理解していませんでした。 –