ちょいめも

物理/Python/Cの雑記帳

pandas、matplotlibでヒストグラム表示

#csv読み込んでヒストグラム表示
#第一引数:csvフルパス

import sys
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd

argvs = sys.argv #引数取得
argc = len(argvs) #引数の個数

if argc != 2:
	print('引数1 : csvファイル フルパス\n')
	input('終了します。何かキーをおしてください。。。\n')
	sys.exit()

dirname, filename = os.path.split(argvs[1])
df = pd.read_csv(argvs[1]) #csv読み込み

#plt.style.use('ggplot') 
#font = {'family' : 'meiryo'}
#matplotlib.rc('font', **font)

#----------グラフ1つ描画----------
df.plot( y=['a', 'e'], bins=10, alpha=0.5, figsize=(5,4), kind='hist') #αは透過 0~1


#----------グラフ複数描画----------
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(15, 10), sharex = False) #sharexはx軸を共有するかどうか

df.plot(y=['a', 'e'], bins=10, alpha=1.0, kind='hist', stacked=True, ax=axes[0,0]) #stacked:積み上げ
axes[0,0].set_title('ae')
axes[0,0].set_xlabel("X")
ave = df['a'].mean()
axes[0,0].text(ave,7,"ave:%.1f" % ave, color='blue', bbox=dict(facecolor='none', edgecolor='blue', pad=5.0)) #平均の位置にテキストを表示したり

df.plot(y=['b', 'c'], bins=10, alpha=1.0, kind='hist', stacked=True, ax=axes[0,1])
axes[0,1].set_title('bc')
axes[0,1].set_xlabel("X")
ave = df['b'].mean()
axes[0,1].text(0.1,0.5,"ave:%.1f" % ave, transform = axes[0,1].transAxes,
		color='blue', bbox=dict(facecolor='none', edgecolor='blue', pad=5.0)) #textの位置をグラフ軸座標で描画。最大1

df.plot(y=['a', 'b', 'c', 'd', 'e'], bins=10, alpha=1.0, kind='hist', stacked=True, ax=axes[0,2])
axes[0,2].set_title('abcde')
axes[0,2].set_xlabel("X")

df.plot(y=['d'], bins=10, alpha=1.0, kind='hist', stacked=True, ax=axes[1,0])
axes[1,0].set_title('d')
axes[1,0].set_xlabel("X")

df.plot(y=['e'], bins=10, alpha=1.0, kind='hist', stacked=True, ax=axes[1,1])
axes[1,1].set_title('e')
axes[1,1].set_xlabel("X")

axes[1,2].axis('off') #空白

fig.tight_layout()  # タイトルとラベルが被るのを解消

plt.savefig(dirname + '\histogram.png') #複数グラフをcsvと同じ場所に保存