matplotを利用する際、毎回どこかの例をコピペするので、ココにまとめておきます。
今後、追加していきましょう。
import matplotlib.pyplot as plt import matplotlib.ticker as ticker from matplotlib.font_manager import FontProperties fp=FontProperties(fname='c:/WINDOWS/Fonts/msgothic.ttc',size = 10) #fp=FontProperties(fname='./font/TakaoGothic.ttf') #import japanize_matplotlib #import seaborn as sns #sns.set(font="IPAexGothic") ##################################################### #ヒストグラム #CDF(2軸) #凡例は外側に配置、透明度0 ##################################################### def plot_hist(col,SaveFName): data=df[col] fig, ax1 = plt.subplots() ax2 = ax1.twinx() # histogram n, bins, patches = ax1.hist(data, bins=200, #density=True, #cumulative=True, range=[-100,100], alpha=0.7, label='頻度') # another y-axis y2 = np.add.accumulate(n) / n.sum() x2 = np.convolve(bins, np.ones(2) / 2, mode="same")[1:] lines = ax2.plot(x2, y2, ls='-', color='r', #marker='o', label='累積分布') # set axis ax1.set_xlim(-100, 100) ax1.set_ylim(0, ylim) ax2.set_ylim(0, 1.05) #ax2.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax1.grid(visible=True) ax1.set_axisbelow(True) # legend handler1, label1 = ax1.get_legend_handles_labels() handler2, label2 = ax2.get_legend_handles_labels() ax1.legend(handler1 + handler2, label1 + label2, loc=2, shadow=True, #borderaxespad=0. prop=fp ) ax1.set_xlabel(col, fontproperties=fp) ax1.set_ylabel('頻度', fontproperties=fp) ax2.set_ylabel('累積確率', fontproperties=fp) plt.savefig('./output/'+SaveFName+'.png', format='png', dpi=300) plt.show() ##################################################### #棒グラフ #CDF(2軸) #凡例は外側に配置、透明度0 ##################################################### fig, ax1 = plt.subplots(figsize=(6,3)) ax2 = ax1.twinx() i=0 for col, data in df.iteritems(): data_sum=data.sum() data1=data.div(data_sum) data_cum = data1.cumsum() bar= ax1.bar(df.index+0.4*i, data, width=0.4, align='edge', label=str(col)) line = ax2.plot(df.index+0.5, data_cum, ls='--', #marker='o', #color='r' label='累積'+str(col)) i=i+1 # set axis ax1.set_xlim(10, 100) ax1.set_ylim(0, 105) ax2.set_ylim(0, 1.05) ax1.grid(visible=True) ax1.set_axisbelow(True) # legend handler1, label1 = ax1.get_legend_handles_labels() handler2, label2 = ax2.get_legend_handles_labels() ax1.legend(handler1 + handler2, label1 + label2, bbox_to_anchor=(1.15, 1.02), loc='upper left', shadow=True, #borderaxespad=0. prop=fp ).get_frame().set_alpha(1.0) ax1.set_xlabel('aaa', fontproperties=fp) ax1.set_ylabel('bbb', fontproperties=fp) ax2.set_ylabel('ccc', fontproperties=fp) plt.savefig('./output/ddd.png', format='png', bbox_inches='tight', dpi=300) ##################################################### #折れ線(マーカーのみの散布図) #移動平均 #dfのカラムを順にプロット #散布図と移動平均の色を合わせる ##################################################### def plot_rolling(df, SaveFName): fig, ax1 = plt.subplots() for i in range(df.shape[1]): lines = ax1.plot(df.index,df.iloc[:,i], ls=' ', color='C'+str(i), marker='o', label=df.columns[i]) for i in range(df_rate.shape[1]): s=df.iloc[:,i].rolling(window=10).mean() lines = ax1.plot(df.index-4.5,s, ls='-', color='C'+str(i), #marker='o', label='移動平均'+str(df.columns[i])) # set axis ax1.set_xlim(0, 50) ax1.set_ylim(0, 0.05) ax1.grid(visible=True) ax1.set_axisbelow(True) # legend ax1.legend(bbox_to_anchor=(1.05, 1), loc='upper left',prop=fp) ax1.set_xlabel('aaa', fontproperties=fp) ax1.set_ylabel('bbb', fontproperties=fp) plt.savefig('./output/'+SaveFName+'.png', format='png', bbox_inches='tight', dpi=300)
0 件のコメント:
コメントを投稿