2021年6月27日日曜日

積み上げ棒グラフ - matplotlib - python

■インポート


import matplotlib.pyplot as plt

■積み上げ棒グラフ


・表示用データ

#-10~10
lsX = range(-10, 11)

#値1
lsY1 = range(21)

#値2
lsY2 = range(20, -1, -1)

・普通に描写する

plt.bar(lsX, lsY1)
plt.bar(lsX, lsY2)

plt.show()
 2つの棒グラフが重なって表示される

・グラフの底上げ

plt.bar(lsX, lsY1)
plt.bar(lsX, lsY2, bottom=lsY1)

plt.show()
 2つ目のグラフの buttom= に1つ目のグラフの値を指定
 グラフが値の分だけ持ち上がる

plt.bar(lsX, lsY2, bottom=lsY1)

plt.show()
 2つ目のだけ描写すると浮かんでいるのがわかる

集合棒グラフ - matplotlib - python

■インポート


import matplotlib.pyplot as plt

■集合棒グラフ


・表示用データ

#-10~10
lsX = range(-10, 11)

#値1
lsY1 = range(21)

#値2
lsY2 = range(20, -1, -1)

・普通に描写する

plt.bar(lsX, lsY1)
plt.bar(lsX, lsY2)

plt.show()
 2つの棒グラフが重なって表示される

・棒の太さを細くする

fltWidth = 0.3

plt.bar(lsX, lsY1, width=fltWidth)
plt.bar(lsX, lsY2, width=fltWidth)

plt.show()
width= で棒の太さを調整

・棒を左右にずらす

fltWidth = 0.3

#左にずらす
lsX1 = list(map(lambda a:a - fltWidth / 2, lsX))

#右にずらす
lsX2 = list(map(lambda a:a + fltWidth / 2, lsX))

plt.bar(lsX1, lsY1, width=fltWidth)
plt.bar(lsX2, lsY2, width=fltWidth)

plt.show()
 X軸の値を太さの半分だけ左右にずらす

2軸グラフ - matplotlib - python

■インポート


import matplotlib.pyplot as plt

■2軸グラフの作成


・表示用データ

#-10~10
lsX = range(-10, 11)

#-10~10の2乗
lsY1 = [a**2 for a in range(-10, 11)]

#-10~10の3乗
lsY2 = [a**3 for a in range(-10, 11)]

・axesを作成してグラフを描写

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

ax1 = fig.add_subplot()
ax1.plot(lsX, lsY1)

plt.show()
 axesを作成して1つ目のグラフを作成

・axesを追加してグラフを描写

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

ax1 = fig.add_subplot()
ax1.plot(lsX, lsY1)

ax2 = ax1.twinx()
ax2.plot(lsX, lsY2, color='orange')

plt.show()
.twinx() で作成済みのaxesに新たにaxesを追加
  追加したaxesにグラフを描写

2021年6月21日月曜日

複数のグラフ - matplotlib - python

■インポート


import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
 matplotlibの gridspec を追加でインポート
 以降の呼び出し簡略化のため「gridspec」と名前を付ける

■複数のグラフを描写


・表示用データ

#-10~10
lsX = range(-10, 11)

#-10~10の2乗
lsY = [a**2 for a in range(-10, 11)]

・下地作成

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

plt.show()
plt.figure() でインスタンス作成
tight_layout=True を指定しておくとグラフが重なって描写されるのを防ぐ
fig.suptitle() でタイトルを追加

・分割数を指定

gs = gridspec.GridSpec(3, 3)
gridspec.GridSpec(行数, 列数) で行数と列数を指定してインスタンス作成

・位置を指定してグラフを描写

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

gs = gridspec.GridSpec(3, 3)

ax1 = fig.add_subplot(gs[0, 1])
ax1.plot(lsX, lsY)
ax1.set_title('plot')

ax2 = fig.add_subplot(gs[1, 2])
ax2.bar(lsX, lsY)
ax2.set_title('bar')

ax3 = fig.add_subplot(gs[2, 0])
ax3.scatter(lsX, lsY)
ax3.set_title('scatter')

plt.show()
fig.add_subplot() で描写する位置を指定してインスタンス作成
 位置は gs[行, 列] で指定( 0 始まり)
 後はインスタンスから .plot() などでグラフを描写

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

gs = gridspec.GridSpec(3, 3)

ax1 = fig.add_subplot(gs[0:2, 0:2])
ax1.plot(lsX, lsY)
ax1.set_title('plot')

ax2 = fig.add_subplot(gs[0:2, 2])
ax2.bar(lsX, lsY)
ax2.set_title('bar')

ax3 = fig.add_subplot(gs[2, :])
ax3.scatter(lsX, lsY)
ax3.set_title('scatter')

plt.show()
gs[行, 列] は「 : 」を使って範囲を指定できる
 ※「n:m」は「n以上m未満」の範囲、「:」だけ指定すると全範囲となる

・分割範囲の大きさを比率で指定する

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

gs = gridspec.GridSpec(2, 2, height_ratios=[1, 2], width_ratios=[3, 1])

ax1 = fig.add_subplot(gs[0, 0])
ax1.plot(lsX, lsY)
ax1.set_title('plot')

ax2 = fig.add_subplot(gs[1, 1])
ax2.bar(lsX, lsY)
ax2.set_title('bar')

plt.show()
gridspec.GridSpec()height_ratios=[] (縦方向)、 width_ratios=[] (横方向)で分割の比率を指定

■おまけ


・axesインスタンスのグラフ装飾

fig = plt.figure(tight_layout=True)
fig.suptitle('fig title')

gs = gridspec.GridSpec(1, 2)

ax1 = fig.add_subplot(gs[0, 0])
ax1.plot(lsX, lsY, color='red', label='y')
ax1.set_title('plot')
ax1.set_xlabel('x-label')
ax1.set_ylabel('y-label')
ax1.legend()
ax1.grid()

ax2 = fig.add_subplot(gs[0, 1])
ax2.bar(lsX, lsY, color='blue', label='y')
ax2.set_title('bar')
ax2.legend()
ax2.tick_params('x', labelrotation=45)
ax2.yaxis.set_ticks([])

plt.show()

2021年6月20日日曜日

グラフの装飾 - matplotlib - python

■インポート


import matplotlib.pyplot as plt
 matplotlibの pyplot をインポート
 以降の呼び出し簡略化のため「plt」と名前を付ける

■グラフの装飾


・表示用データ

#-10~10
lsX = range(-10, 11)

#-10~10の2乗
lsY1 = [a**2 for a in range(-10, 11)]

#-10~10の2乗 * 2
lsY2 = [a**2 * 2 for a in range(-10, 11)]

・色、透過率、凡例

plt.plot(lsX, lsY1, color='#ff8000', alpha=0.5, label='y1')
plt.plot(lsX, lsY2, color='#0080ff', alpha=0.5, label='y2')

plt.legend()

plt.show()
plt.plot() に属性を指定する
  ・ color= :RGBカラー(単純な色なら'red'、'green'などでも指定可)
  ・ alpha= :透過率(0.0~1.0)
  ・ label= :凡例に記述する名前
plt.legend() で凡例をグラフに追加

・タイトル、軸ラベル、グリッド

plt.plot(lsX, lsY1, color='#ff8000', alpha=0.5, label='y1')
plt.plot(lsX, lsY2, color='#0080ff', alpha=0.5, label='y2')
plt.legend()

plt.title('sample graph')
plt.xlabel('x-label')
plt.ylabel('y-label')
plt.grid()

plt.show()

・ラインスタイル

plt.plot(lsX, lsY1, color='#ff8000', alpha=0.5, label='y1', linestyle='--')
plt.plot(lsX, lsY2, color='#0080ff', alpha=0.5, label='y2', linestyle='-.')
plt.legend()

plt.title('sample graph')
plt.xlabel('x-label')
plt.ylabel('y-label')
plt.grid(alpha=0.5, linestyle=':')

plt.show()
linestyle= で線の種類を指定
  ※グリッドも同様に指定可能

・軸目盛

plt.plot(lsX, lsY1, color='#ff8000')
plt.plot(lsX, lsY2, color='#0080ff')
plt.xticks(rotation=45)
plt.yticks(rotation=90)

plt.show()
plt.xticks()plt.yticks() )に rotation= で角度を指定して目盛を回転

plt.plot(lsX, lsY1, color='#ff8000')
plt.plot(lsX, lsY2, color='#0080ff')
plt.xticks([])
plt.yticks([])

plt.show()
plt.xticks([]) とすると目盛を削除できる

簡易グラフ - matplotlib - python

■インポート


import matplotlib.pyplot as plt
 matplotlibの pyplot をインポート
 以降の呼び出し簡略化のため「plt」と名前を付ける

■簡易グラフ


・表示用データ

#-10~10
lsX = range(-10, 11)

#-10~10の2乗
lsY = [a**2 for a in range(-10, 11)]
 ※データの長さは等しくなるように

・線グラフ

plt.plot(lsX, lsY)

plt.show()
plt.plot() にX軸とY軸の値を指定
plt.show() でグラフを表示

・棒グラフ

plt.bar(lsX, lsY)

plt.show()

・散布図

plt.scatter(lsX, lsY)

plt.show()

・ヒストグラム

plt.hist(lsY)

plt.show()
plt.hist() に値を指定
  デフォルトでは自動で10区間に分割する

plt.hist(lsY, bins=20)

plt.show()
bins= に分割数を指定できる

matplotlib - python

■インストール


 コマンドプロンプトから実行
pip install matplotlib

■グラフ作成

簡易グラフ

グラフの装飾

複数のグラフ


■いろいろなグラフ

2軸グラフ

集合棒グラフ

積み上げ棒グラフ