Python - matplotlib によるグラフ表示
公開日:2019-06-26 更新日:2019-07-01
[Python]
1. 概要
2. グラフの基本
2-1. シンプルな折れ線グラフ
グラフデータを配列で plot() に渡して、show() でグラフを表示します。
グラフの表示範囲は、自動的に調整されます。
グラフの表示範囲は、自動的に調整されます。
import matplotlib.pyplot as plt
x_list = [ 5, 6, 7, 8, 9]
y_list = [50, 40, 30, 20, 10]
plt.plot(x_list, y_list)
plt.show()
2-2. 書式の設定
線種、色、凡例、軸のタイトル、グラフの表示範囲を設定します。
import matplotlib.pyplot as plt
x_list = [ 5, 6, 7, 8, 9]
y_list = [50, 40, 30, 20, 10]
# グラフのタイトル
plt.title('Title')
# 軸のラベル
plt.xlabel('X軸')
plt.ylabel('Y軸')
# グラフの表示範囲
plt.xlim([4, 10])
plt.ylim([0, 100])
# グリッドの表示
plt.grid()
# 書式
marker = 'o' # [.,o]:丸 [v^<>1234]:三角 p:五角形 *:星 [hH]:六角形 [dD]:ダイヤ [+x_|]:そのまま出る
line = '--' # - -- -. :
color = 'r' # b:青 g:緑 r:赤 c:シアン m:マゼンダ y:黄 k:黒 w:白
fmt = marker + line + color
# グラフデータの設定
plt.plot(list(x_list), list(y_list), fmt, label = 'apple')
# 凡例の表示
plt.legend()
# グラフの表示
plt.show()
2-3. 棒グラフ
import matplotlib.pyplot as plt
plt.bar(
['Tokyo', 'Saitama', 'Chiba', 'Kanagawa', 'Ibaraki'],
[10, 20, 30, 40, 50]
)
plt.show()
bar() を barh() にすると、横の棒グラフになります。
2-4. 円グラフ
import matplotlib.pyplot as plt
plt.pie(
[10, 20, 30, 40, 50],
labels = ['Tokyo', 'Saitama', 'Chiba', 'Kanagawa', 'Ibaraki'],
colors = ['r' , 'b' , 'y', 'm', '#00ff00'],
autopct = "%1.2f%%",
textprops = {'weight':"bold"},
)
plt.show()
2-5. 散布図
import matplotlib.pyplot as plt
x_list = range(1, 11)
y_list = [ 1.5, 2.6, 2.8, 4.3, 5.5, 5.7, 7.3, 7.7, 9.5, 9.9]
plt.scatter(x_list, y_list, c='b')
#plt.plot( x_list, y_list, 'b*')
plt.show()
2-6. 積み上げ棒グラフ
import numpy as np
import matplotlib.pyplot as plt
# 目盛りの値の設定
x_list = [0, 1, 2, 3, 4]
y_list = np.arange(0, 101, 20)
# グラフの値
tokyo = [30, 30, 20, 20, 30]
saitama = [20, 30, 20, 30, 30]
ibaraki = [10, 10, 10, 10, 10]
# 一番に積み上がる棒グラフのかさ上げ用
tokyo_bottom = np.array(saitama) + np.array(ibaraki)
# グラフデータの設定
plt.bar(x_list, ibaraki, label = 'Ibaraki')
plt.bar(x_list, saitama, label = 'Saitama', bottom = ibaraki)
plt.bar(x_list, tokyo, label = 'Tokyo' , bottom = tokyo_bottom)
# 目盛りの設定
plt.xticks(x_list, (['1月', '2月', '3月', '4月', '5月']))
plt.yticks(y_list)
# 凡例の表示
plt.legend()
# グラフの表示
plt.show()
pandas を使うと、簡単に表示することができます。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Yu Mincho'
df = pd.DataFrame(
[
[10, 20, 30],
[10, 30, 30],
[10, 20, 20],
[10, 30, 20],
[10, 30, 30]
],
index = ['1月', '2月', '3月', '4月', '5月'],
columns = ['Saitama', 'Ibaraki', 'Tokyo']
)
df.plot.bar(stacked = True, yticks = range(0, 120, 20), rot = 0)
#df.plot(kind = 'bar', yticks = range(0, 81, 10))
#df.plot(kind = 'line', yticks = range(0, 51, 10))
plt.show()
3. 1つのグラフに複数のグラフ表示
他のグラフを plot() するだけで、グラフを重ねることができます。
import matplotlib.pyplot as plt
x_list = range(0, 5)
plt.plot(x_list, [40, 45, 35, 30, 20], 'b' , label = 'Tokyo')
plt.plot(x_list, [10, 15, 30, 35, 35], '-.g', label = 'Saitama')
plt.plot(x_list, [ 5, 10, 20, 40, 50], '--r', label = 'Ibaraki')
plt.bar (x_list, [ 5, 10, 20, 25, 30])
plt.xticks(x_list, (['1月', '2月', '3月', '4月', '5月']))
plt.legend()
plt.show()
4. 複数のグラフ表示
plt.subplots() で、複数のグラフを作成できます。
以下のように、plt.plot() で設定することもできる。
import matplotlib.pyplot as plt
import numpy as np
x_list = range(0, 10)
y_list = x_list
np.random.randint(4, 10, (2, 1))
# 2行4列 のグラフの作成
(fig, ax) = plt.subplots(2, 4, figsize = (10, 6))
fig.suptitle('Title')
ax[0, 0].bar (x_list, y_list)
ax[0, 1].plot (x_list, y_list, 'b')
ax[0, 2].plot (x_list, y_list, 'ro')
ax[0, 3].scatter(x_list, y_list)
# 1つのグラフに重ねることもできる
ax[1, 0].bar (x_list, y_list)
ax[1, 0].plot (x_list, np.array(y_list) + 5)
ax[1, 0].scatter(x_list, np.array(y_list) + 10)
# 普通にプロットすると、一番最後のグラフに設定される
plt.bar (x_list, x_list)
plt.plot(x_list, y_list)
plt.show()
以下のように、plt.plot() で設定することもできる。
import matplotlib.pyplot as plt
import numpy as np
x_list = range(0, 10)
y_list = x_list
np.random.randint(4, 10, (2, 1))
# グラフの作成
fig = plt.figure(figsize = (10, 6))
rows = 2
cols = 4
plt.subplot(rows, cols, 1)
plt.bar(x_list, y_list)
plt.subplot(rows, cols, 2)
plt.plot(x_list, y_list, 'b')
plt.subplot(rows, cols, 3)
plt.plot(x_list, y_list, 'ro')
plt.subplot(rows, cols, 4)
plt.scatter(x_list, y_list)
plt.subplot(rows, cols, 5)
plt.plot (x_list, y_list)
plt.plot (x_list, np.array(y_list) + 5)
plt.scatter(x_list, np.array(y_list) + 10)
plt.show()
5. pandas によるグラフ表示
Series、DataFrame のオブジェクトから簡単にグラフ表示ができます。
import pandas as pd
import matplotlib.pyplot as plt
# 2行4列のグラフ群の作成
(fig, ax) = plt.subplots(2, 4, figsize = (10, 6))
# グラフデータ
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([40, 30, 10, 20, 40])
# グラフデータ(散布図用)
df = pd.concat([s1, s2], axis = 1)
df.columns = ['x', 'y']
# グラフ表示
s1.plot(ax = ax[0, 1], kind = 'bar')
s2.plot(ax = ax[0, 2], kind = 'line', style = 'b--', lw = 3)
s1.plot(ax = ax[1, 0], kind = 'bar')
s2.plot(ax = ax[1, 0], kind = 'line', style = 'b--', lw = 3)
s1.plot(ax = ax[1, 1], kind = 'barh')
df.plot(ax = ax[1, 2], kind = 'scatter', x = 'x', y = 'y')
# ax を指定しないと、最後のグラフに設定される
s1.plot()
plt.show()
6. グラフのファイル出力
plt.savefig() で Figure 単位でグラフを保存できます。
また、plt.show() をすると、新しいグラフが作成されるため、
savefig() の前で show() しないようにしてください。
また、plt.show() をすると、新しいグラフが作成されるため、
savefig() の前で show() しないようにしてください。
import matplotlib.pyplot as plt
plt.plot([5, 6, 7, 8, 9])
plt.savefig('test.png')