一日一Python:色々なグラフの描き方
はじめに
昔書いたものを投稿.記事中のリンクはダミーが多い.
一向に解析が終わらないので,色々なグラフをみていこう.グラフって最も基本でありながら,ある意味で一番詰まる部分でもあったりするので,これまでに触ってきたグラフをここで纏めてみたい.後で検索して調べやすい様に,出来るだけ説明的に,キーワードを散りばめておきたい.
まず,グラフを描くライブラリとしては,
- matplotlib
- seaborn
- pandas
- plotly
等がある.matplotlibは言わずもがな,ド定番のライブラリで,MATLABから移植されたモジュールで,使い勝手も似たような感じ.自由度は極めて高く,使いこなせればなんでもできるが(絵を描いたり,アニメを表示する事もできる),一から十まで指定しなければいけないので,使いこなすのが大変だったりする.
seabornやpandasはmatplotlibのラッパーになっており,それぞれ明確な意図の元で,モジュール化されている.seabornは「Seaborn: statistical data visualization」と謳っている通り,設計思想に統計学が透けてみえる.主に統計的データのビジュアライゼーションや,統計解析の支援に有用だろう.また,学術的立場から見易さが追求され,分り易く,出来る限りシンプルで,合理的なシンプルさを備え持つ.「import seaborn」をするだけで,スタイルがセットされるので,おまじないのごとく,とりあえずmatplotlibとセットにしておくと良いだろう.
pandasは「Panel Data System」の略であり,「easy-to-use data structures and data analysis tools
」と説明されている.パネルデータとは,統計学や計量経済学等でよく使われる用語で,時系列データとクロスセクションデータを合わせ,時間的,空間的な分析を目的にしたデータの事で,それを分析/解析する為のツールを謳っているのがPandasである.従って,その手のデータ解析に於いて,Pandasを使わないのはあり得ない!というのがよく分かるだろう.データの分析手法として,グラフ化は簡便でありながら強力な手法である事は言うまでもない.Pandasにもグラフ化の為の方法が幾つも備わっており,Pandasで扱えるデータ(DataFrameやSeries)の場合は,Pandas.plotを使わない手は無いだろう.内部処理的には,matplotlibを呼び出しているため,自分で実装できる筈だが,込み入ったデータ等は自分でなかなか軸を揃えたり,上手く意図したグラフを描画できなかったりするが,そんなデータでも綺麗にグラフ化してくれる.本当にすごいやつだ.
plotlyはインタラクティブなグラフ描画を可能にするライブラリで,マウスでグリグリと動かせるグラフを簡単に作成できる.しかし,単純に拡大/縮小や軸に合わせて移動したいだけなら,Jupyterのインタラクティブモードを起動すれば十分だったりする(%matplotlib nbagg).なので,ここではほとんど説明しない.
それでは,一つずつみていこう.
PAGE_BREAK: PageBreak
10分で学ぶPython 第4回 Seabornでグラフ描画
より
import numpy as np #数値計算用パッケージ,これがあると本当に便利 import pandas as pd #データ解析,分析用パッケージ(Numpyベース) import seaborn as sns #“グラフ描画,ビジュアライゼーション用パッケージ x = np.random.normal(size=1000) #ランダムデータをnumpy arrayとして作る tips = sns.load_dataset("tips") ## お店の食事時間と会計総額とチップの関係のデータ iris = sns.load_dataset("iris") ## Rでお馴染みのアヤメの統計データ sns.distplot(x, kde=True, rug=True, bins=10) ##ヒストグラム
sns.jointplot('sepal_width', 'petal_length', data=iris) ##散布図
sns.pairplot(iris, hue="species") ##全ての変数同士の散布図がみられる, "hue="オプションでカテゴリ別に色分け可能
PAGE_BREAK: PageBreak
10分で学ぶPython番外編 Pandasモジュールについて-10分では学べ無いけど重要-
より
Pandas.DataFrame.plot()
PAGE_BREAK: PageBreak
#棒グラフ(各列平均の棒グラフ), Pandas.DataFrame.mean().plot.bar()も可能 Pandas.DataFrame.mean().plot(kind='bar')
PAGE_BREAK: PageBreak
#散布図, Pandas.DataFrame.plot.scatter('sepal_length', 'sepal_width') Pandas.DataFrame.plot('sepal_length', 'sepal_width', kind='scatter')
PAGE_BREAK: PageBreak
#ヒストグラム Pandas.DataFrame.hist()
#ヒストグラム Pandas.DataFrame.plot(kind='hist')
PAGE_BREAK: PageBreak
#散布図行列(全列間の散布図)「from pandas.tools.plotting import scatter_matrix」 scatter_matrix(Pandas.DataFrame)
内部処理的にplt.subplot()とplt.scatter(), plt.hist()の嵐っぽい.
カテゴリーデータに基づいて色分けしたければ,seabornを使った方が良い.
PAGE_BREAK: PageBreak
#seabornの散布図行列 sns.pairplot(d, hue='species')#import seaborn as sns
PAGE_BREAK: PageBreak
#各列の棒グラフ(sepal_lengthでソート) DataFrame.sort_values('sepal_length').plot.barh(subplots=True, layout=(1,4), sharex=False, legend=False, figsize=(12, 6)) #subplots=Trueで各列別々のグラフ,layout=(1, 4)で横に4つのグラフ #sharex=Falseで各列ごとに軸変更可,legend=Falseで凡例なし,figsizeで大きさ指定
PAGE_BREAK: PageBreak
一日一Python(1コード):前回の続き-Opening処理をしてノイズ除去&エッジ検出して欲しい所をトリミング
より
#Jupyter上で画像表示する場合はmatplotlibを使う方が良い f, axarr = plt.subplots(4, sharex=True, sharey=True) axarr[0].imshow(im_org)#元画像 axarr[0].set_title('Origin image and mask') axarr[1].imshow(hsv) axarr[2].imshow(im_mdn) axarr[3].imshow(mask)#mask画像
2次元(イメージ)データの描画にはimshow()を使う.ヒートマップなども同様.
PAGE_BREAK: PageBreak
一日一Python(1コード):QiitaやStackoverflowをみていて適当に思いついた事をやる
より
import sympy as sym sym.init_printing() F = x**3 - 2 * x + y**2 > 0#楕円曲線 sym.plot_implicit(F, (x, -2, 2), (y, -2, 2))
F = x**3 - 2 * x + y**2 sym.plot_implicit(F, (x, -2, 2), (y, -2, 2))
PAGE_BREAK: PageBreak
F = x**2 + y**2 - 4 sym.plot_implicit(F, (x, -2, 2), (y, -2, 2))
from sympy.plotting import plot F = 2 * x ** 2 - 3 * x + 1 plot(F, (x, -1, 2))
PAGE_BREAK: PageBreak
import sympy as sym import numpy as np from scipy import integrate import matplotlib.pyplot as plt import seaborn as sns sym.init_printing() #最適化処理、無くても良い # 使用する変数の定義 x = sym.symbols('x') F = x + 1 G = x**2 - 1 #陽関数の場合は,sympy.plotting.plot() #陰関数の場合は,sympy.plot_implicit() sym.plotting.plot(F, G, (x, -1, 3))
陽関数の場合は,sympy.plotting.plot()
陰関数の場合は,sympy.plot_implicit()
を使うといいだろう。
PAGE_BREAK: PageBreak
Pythonでアニメーション描画
より
ーArtistAnimation
import numpy as np import matplotlib.animation as animation import matplotlib.pyplot as plt import seaborn as sns fig = plt.figure() ims = [] #initial condition grvt_accl = 9.8 vl_init = 19.6 y_init = 0 t = np.arange(0, 4.1, 0.1) x = np.array([0]*t.size) accl = np.array([-grvt_accl]*t.size)#時間tに対する加速度aベクトル vl = vl_init + accl * t y = y_init + vl_init * t + 1/2 * accl * t**2 ax1 = fig.add_subplot(4,1,1) ax2 = fig.add_subplot(4,1,2) ax3 = fig.add_subplot(4,1,3) ax4 = fig.add_subplot(4,1,4) ax1.plot(t, accl) ax2.plot(t, vl) ax3.plot(t, y) ax4.plot(x, y) for i in range(t.size): im, = ax1.plot(t[i], accl[i], 'o') im2, = ax2.plot(t[i], vl[i], 'o') im3, = ax3.plot(t[i], y[i], 'o') im4, = ax4.plot(x[i], y[i], 'o') ims.append([im, im2, im3, im4]) ani = animation.ArtistAnimation(fig, ims) ani.save('hogehoge2.gif', writer='imagemagick') plt.show()
ーFuncAnimation
#FuncAnimationバージョン #鉛直投げ上げ運動 # #accl = -grvt_accl #vl = vl_init + accl*t = vl0 - grvt_accl*t #y = y_init + vl_init -1/2 * grvt_accl * t^2 #a-tグラフ,v-tグラフ,y-tグラフ,x-yグラフを描く import numpy as np import matplotlib.animation as animation import matplotlib.pyplot as plt import seaborn as sns grvt_accl = 9.8 vl_init = 19.6 y_init = 0 t = np.arange(0, 4.1, 0.1) x = np.array([0]*t.size) accl = np.array([-grvt_accl]*t.size)#時間tに対する加速度aベクトル vl = vl_init + accl * t y = y_init + vl_init * t + 1/2 * accl * t**2 def update(i): plt.clf() plt.subplot(4, 1, 1) plt.plot(t, accl) plt.plot(t[i], accl[i], 'o') plt.subplot(4, 1, 2) plt.plot(t, vl) plt.plot(t[i], vl[i], 'o') plt.subplot(4, 1, 3) plt.plot(t, y) plt.plot(t[i], y[i], 'o') plt.subplot(4, 1, 4) plt.plot(x[i], y[i], 'o') plt.plot(x, y) fig = plt.figure() ani = animation.FuncAnimation(fig, update, frames=t.size, blit=True) ani.save('hogeFunc.gif', writer='imagemagick', fps=5) plt.show()
PAGE_BREAK: PageBreak
一日一Python(1コード):Pythonで制御工学ーボード線図を描いてみよう
より
,周波数特性を知りたい.周波数応答を知るために,ボード線図を描きたい.伝達関数求めるのに微積分は面倒だからラプラス変換がしたい.「Scipy.signal」でボード線図を求める事ができる.「Python-control」はMATLABライクなモジュールで,MATLABのcontrol toolboxでできる事の大体の事ができるっぽい.Sympyでも記号定義して,式変換の関数を利用すればラプラス変換ができるっぽい.そんな話.
import numpy as np from scipy import signal import matplotlib.pyplot as plt # パラメータ設定 m = 0 c = 1 k = 625 num = [k] den = [m, c, k] s1 = signal.lti(num, den) w, mag, phase = signal.bode(s1, np.arange(1, 10000, 1)) # プロット plt.figure(1) plt.subplot(211) plt.loglog(w, 10**(mag/20)) plt.ylabel("Amplitude") plt.axis("tight") plt.subplot(212) plt.semilogx(w, phase) plt.xlabel("Frequency[Hz]") plt.ylabel("Phase[deg]") plt.axis("tight") plt.ylim(-100, 0) # plt.show()
Scipy.signalには信号処理の様々な関数が用意されていて,signal.firwin()でFIRフィルタ,その他ffrwin2を用いてFIRフィルタ,IIRフィルタ,その他フィルタを簡単に設計できるし,signal.buttord(), signal.cheb1ord(), signal.bessel()等,その他パワースペクトルを求める関数とか,信号処理に関する一通りのものが揃っている
import numpy as np from scipy import signal import matplotlib.pyplot as plt n = 1024 dt = 0.001 fs = 1/dt f1 = 120 f2 = 150 t = np.linspace(1, n, n)*dt-dt y = np.sin(2*np.pi*f1*t)+2*np.sin(2*np.pi*f2*t)+0.1*np.random.randn(t.size) freq1, P1 = signal.periodogram(y, fs) freq2, P2 = signal.welch(y, fs) freq3, P3 = signal.welch(y, fs, nperseg=n/2) freq4, P4 = signal.welch(y, fs, nperseg=n/8) plt.figure() plt.plot(freq1, 10*np.log10(P1), "b", label="periodogram") plt.plot(freq2, 10*np.log10(P2), "r", linewidth=2, label="nseg=n/4") plt.plot(freq3, 10*np.log10(P3), "c", linewidth=2, label="nseg=n/2") plt.plot(freq4, 10*np.log10(P4), "y", linewidth=2, label="nseg=n/8") plt.ylim(-60, 0) plt.legend(loc="upper right") plt.xlabel("Frequency[Hz]") plt.ylabel("Power/frequency[dB/Hz]") # plt.show()
PAGE_BREAK: PageBreak
import numpy as np from scipy import signal import matplotlib.pyplot as plt # 時系列のサンプルデータ作成 n = 512 # データ数 dt = 0.01 # サンプリング間隔 f = 1 # 周波数 fn = 1/(2*dt) # ナイキスト周波数 t = np.linspace(1, n, n)*dt-dt y = np.sin(2*np.pi*f*t)+0.5*np.random.randn(t.size) # パラメータ設定 fp = 2 # 通過域端周波数[Hz] fs = 3 # 阻止域端周波数[Hz] gpass = 1 # 通過域最大損失量[dB] gstop = 40 # 阻止域最小減衰量[dB] # 正規化 Wp = fp/fn Ws = fs/fn # ローパスフィルタで波形整形 # バターワースフィルタ N, Wn = signal.buttord(Wp, Ws, gpass, gstop) b1, a1 = signal.butter(N, Wn, "low") y1 = signal.filtfilt(b1, a1, y) # 第一種チェビシェフフィルタ N, Wn = signal.cheb1ord(Wp, Ws, gpass, gstop) b2, a2 = signal.cheby1(N, gpass, Wn, "low") y2 = signal.filtfilt(b2, a2, y) # 第二種チェビシェフフィルタ N, Wn = signal.cheb2ord(Wp, Ws, gpass, gstop) b3, a3 = signal.cheby2(N, gstop, Wn, "low") y3 = signal.filtfilt(b3, a3, y) # 楕円フィルタ N, Wn = signal.ellipord(Wp, Ws, gpass, gstop) b4, a4 = signal.ellip(N, gpass, gstop, Wn, "low") y4 = signal.filtfilt(b4, a4, y) # ベッセルフィルタ N = 4 b5, a5 = signal.bessel(N, Ws, "low") y5 = signal.filtfilt(b5, a5, y) # FIR フィルタ a6 = 1 numtaps = n b6 = signal.firwin(numtaps, Wp, window="hann") y6 = signal.lfilter(b6, a6, y) delay = (numtaps-1)/2*dt # プロット plt.figure() plt.plot(t, y, "b") plt.plot(t, y1, "r", linewidth=2, label="butter") plt.plot(t, y2, "g", linewidth=2, label="cheby1") plt.plot(t, y3, "c", linewidth=2, label="cheby2") plt.plot(t, y4, "m", linewidth=2, label="ellip") plt.plot(t, y5, "k", linewidth=2, label="bessel") plt.plot(t-delay, y6, "y", linewidth=2, label="fir") plt.xlim(0, 4) plt.legend(loc="upper right") plt.xlabel("Time [s]") plt.ylabel("Amplitude") # plt.show()
PAGE_BREAK: PageBreak
一日一Python:RainbowChart2
より
Pandas.plotでサブプロットを用いたい時のテクニック
_, axarr = plt.subplots(2, figsize=(8, 6))
DATARainbow_shift.plot(ax = axarr[0])
DATARainbow_shift.tail(365).plot(ax = axarr[1])
pandas.plot(ax=……)でグラフ軸を指定できる.
plt.plotは2つの返り値があるが,返り値を使用しない場合は明示的に「_」を使う.
PAGE_BREAK: PageBreak
10分で学ぶPython 第10回 2軸グラフを描こう-Pandas plotが超便利という話
より引用
import pandas as pd import seaborn as sns df = pd.read_csv("Demographics.csv", index_col='TIME')#index_col=0でも良い df_diff = df.diff() df_diff.columns = ['City001_diff', 'City002_diff', 'City003_diff'] dfdf = df.join(df_diff) ax = dfdf.plot(secondary_y=['City001_diff', 'City002_diff', 'City003_diff']) ax.set_ylabel('Total Population') ax.right_ax.set_ylabel('Change in the population')
PAGE_BREAK: PageBreak
10分で学ぶPython 第12回 サンプルをみながらグラフあれこれ-matplotlib/seabornで色んなグラフを描こう,みよう- [PDF]
10分で学ぶPython 第13回 サンプルをみながらグラフあれこれ-前回の続き-
より
import numpy as np import matplotlib.pyplot as plt plt.xkcd() # XKCDスタイルを適用,向こうで有名な漫画スタイル? plt.plot(np.sin(np.linspace(0, 10))) plt.title('Whoo Hoo!!!')
PAGE_BREAK: PageBreak
from pylab import * import numpy as np xkcd() ylim([-10, 5]) xticks([]) yticks([]) xlabel('TIME', fontsize=20) ylabel('Quolity of Life', fontsize=20) data = np.hstack((np.linspace(-2, 0, 90), -np.arange(10))) plot(data) annotate('MONDAY', xy=(90, 0), arrowprops=dict(arrowstyle='->'), xytext=(15, -5), size=20) show()
PAGE_BREAK: PageBreak
import numpy as np import seaborn as sns flip=1 x = np.linspace(0, 14, 100) for i in range(1, 7): sns.plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip) sns.plt.savefig('no13_result01.png') sns.plt.show()
PAGE_BREAK: PageBreak
import numpy as np import seaborn as sns x = np.random.normal(size=100) sns.distplot(x)#デフォルトではsns.distplot(x, kde=True, rug=False) sns.plt.savefig('no13_result02.png') sns.plt.show()
PAGE_BREAK: PageBreak
titanic = sns.load_dataset("titanic") sns.pointplot(x="class", y="survived", hue="sex", data=titanic, palette={"male": "g", "female": "m"}, markers=["^", "o"], linestyles=["-", "--"]) sns.plt.savefig('no13_result03.png') sns.plt.show()
ちなみに,
>sns.factorplot(x=”class”, y=”survived”, col=”sex”, data=titanic)
とすれば水準別のグラフが,
>sns.factorplot(x=”class”, y=”survived”, hue=”sex”, data=titanic,
palette={"male": "g", "female": "m"},
markers=["^", "o"], linestyles=["-", "--"])
とすれば同じグラフが描ける.
参考:
seaborn.factorplot-seaborn 0.7.1
PAGE_BREAK: PageBreak
titanic = sns.load_dataset("titanic") sns.barplot(x="sex", y="survived", hue="class", data=titanic) sns.plt.savefig('no13_result04.png') sns.plt.show()
PAGE_BREAK: PageBreak上の2つのグラフを見比べるとよく分かるだろう.『sns.pointplot()』は所謂「折れ線グラフ」では無い.つまり,時系列データを可視化する為の方法ではなくて,棒グラフと同じニュアンスの方法になる.棒グラフの場合,水準内での変数比較には便利だが,水準間も含めた変数の比較(有意差の検討)には向かない.また,棒グラフは比較に好まれて使われるが,実は統計的妥当性に欠いた,あまり良い手法ではない.
上のグラフをみてもらえば分かるが,分かり易い様にみえて,実は『棒』の部分には意味が無い.重要なのは,棒の上端(平均を表している部分)とバー(標準偏差を表している部分)でしか無い.そういう意味でも,『sns.pointplot()』の方が,より便利でかつ統計的妥当性を有する(y_labelがmean(変数名)なのもまさにそれを表している).
ちなみに,seabornでは,これらは全て含有した『sns.factorplot()』がある.ファクタープロットの一形態として,『sns.pointplot()』『sns.barplot』という形式がある.
また,『sns.factorplot()』のパッケージ名は『pointplot_anova.py』になっている事からも,そのスキームが分かる.(『sns.pointplot()』はまさにANOVAを視覚化したもの;交互作用の判断はまさにこれ)
実用的な観点から云えば,有意差の検討等水準間,水準内の比較は『sns.factorplot()』,データの分布,構造を検討したい場合には『sns.boxplot()』を覚えておけば良いだろう.
PAGE_BREAK: PageBreak
import numpy as np import seaborn as sns import pandas as pd mean, cov = [0, 1], [(1, .5), (.5, 1)] data = np.random.multivariate_normal(mean, cov, 200) df = pd.DataFrame(data, columns=['x', 'y']) sns.jointplot(x='x', y='y', data=df) sns.plt.savefig('no13_result05.png') sns.plt.show()
sns.jointplot(x="x", y="y", kind="kde", data=df)#カーネル密度推定 sns.plt.savefig('no13_result06.png')
PAGE_BREAK: PageBreak
import seaborn as sns iris = sns.load_dataset("iris") #サンプルデータセット sns.pairplot(iris)#各変数のヒストグラムと全変数間の散布図 sns.plt.savefig('no13_result07.png') sns.plt.show()
PAGE_BREAK: PageBreak
sns.pairplot(iris,hue="species")#各変数をカテゴリで色分け sns.plt.savefig('no13_result08.png')
PAGE_BREAK: PageBreak
import seaborn as sns # Load the long-form example gammas dataset gammas = sns.load_dataset("gammas") # Plot the response with standard error sns.tsplot(data=gammas, time="timepoint", unit="subject", condition="ROI", value="BOLD signal") sns.plt.savefig('no13_result09.png')
所謂,「折れ線グラフ」を描く関数はこれだろうね.ただ,あくまで「時系列データ」の折れ線グラフであって,単なる折れ線グラフを描く場合は,やはりplt.plot()を用いるべき.
参考:
Timeseries from DataFrame-seaborn0.7.1
PAGE_BREAK: PageBreak
import numpy as np; np.random.seed(22) import seaborn as sns; sns.set(color_codes=True) x = np.linspace(0, 15, 31) data = np.sin(x) + np.random.rand(10, 31) + np.random.randn(10, 1) ax = sns.tsplot(data=data) sns.plt.savefig('no13_result10.png')
シャドーは信頼区間を表す.標準は1σ,約68%CIになっている.
PAGE_BREAK: PageBreak
一日一Python:scikit-learnでSVM/SVRを用いた為替の売買予測(その6)
より
纏めるだけで力尽きたので,簡単に.
Seabornでは標準のカラーパレットには6色しかなく,それ以上のデータが来ると色が被る.
なので,色を変えようと思うと,カラーパレットを設定しないといけない.それについての情報は割とある.
問題は,1つずつ指定したい場合.plt.plot()時には,一つずつ指定しながらプロットすれば良いが,
Pandas plotの場合は,一気にデータフレームから描画して,その後指定したい.が,それができない.
苦肉の策がこれ.
plt.figure() with pd.plot_params.use('x_compat', True): Close_AlMTRX['Close'].plot(color='b') Close_AlMTRX['+03Band'].plot(color='g') Close_AlMTRX['-03Band'].plot(color='g') Close_AlMTRX['+09Band'].plot(color='y') Close_AlMTRX['-09Band'].plot(color='y') Close_AlMTRX['+40Band'].plot(color='r') Close_AlMTRX['-40Band'].plot(color='r')
日本語の情報が殆ど無くて,僕の理解になるけど.with構文で構文内のロジックを順次処理している感じ(try … finally … みたいな処理か).多分,plot_paramsはdict型のプロッティングパラメータで,x_compatは,Pandasは時系列データのティックレゾリューションが自動調整されるので,x軸のアライメント調整のためにx_compatを指定する感じ.
PAGE_BREAK: PageBreak
ma = Close_AlMTRX['Close'].rolling(25).mean() mstd = Close_AlMTRX['Close'].rolling(25).std() plt.figure() plt.plot(Close_AlMTRX.index, Close_AlMTRX['Close']) plt.fill_between(Close_AlMTRX.index, Close_AlMTRX['-03Band'], Close_AlMTRX['+03Band']) plt.fill_between(Close_AlMTRX.index, Close_AlMTRX['-09Band'], Close_AlMTRX['+09Band']) plt.fill_between(Close_AlMTRX.index, Close_AlMTRX['-40Band'], Close_AlMTRX['+40Band']) plt.plot(ma.index, ma) plt.fill_between(mstd.index, ma-2*mstd, ma+2*mstd, alpha=0.2)
plt.fill_between(mstd.index, ma-2mstd, ma+2mstd, alpha=0.2)
で塗りつぶすことができる.シャドーを表現したい時に便利.
plt.は標準で上書きがTrueなので,重ねてグラフ描画すれば良い.
PAGE_BREAK: PageBreak
plt.figure() with pd.plot_params.use('x_compat', True): Close_AlMTRX['Close'].plot(color='b') Close_AlMTRX['+03Band'].plot(color='g') Close_AlMTRX['-03Band'].plot(color='g') Close_AlMTRX['+09Band'].plot(color='y') Close_AlMTRX['-09Band'].plot(color='y') Close_AlMTRX['+40Band'].plot(color='r') Close_AlMTRX['-40Band'].plot(color='r') ax = plt.plot(ma.index, ma) ax = plt.fill_between(mstd.index, ma-2*mstd, ma+2*mstd, alpha=0.2) ax = plt.fill_between(mstd.index, ma-3*mstd, ma+3*mstd, alpha=0.2)
組み合わせれば,こういうグラフが表現できる.という訳で,これまでの様々なグラフを再掲した.割と色々な取り組みをしていたなと思う.これをみれば,大体のグラフとか,やりたいことができるんじゃないだろうか.
ピンバック: Pythonで直積,順列,組み合わせ,階乗の計算 | 粉末@それは風のように (日記)
ピンバック: Requests: 人間のためのHTTP | 粉末@それは風のように (日記)
ピンバック: facetplotでデータの情報構造を可視化 | 粉末@それは風のように (日記)