チートシート (ラボクオリティなので、ご利用は自己責任でお願いします)
Matplotlib
基本  初期設定  スタイル  レイアウト調整  線種・マーカー  色・カラーマップ  描画関連  ラベルと凡例 
グラフ関連: ヒストグラム  散布図  棒グラフ  その他のグラフ 
subplot(複数グラフ)  x軸共有y2軸表示  画像の表示  保存  日本語表示  その他 

基本
・基本
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

# サイズ調整
plt.figure(figsize=(8,5))
plt.plot(x, y)

# 通常
# plt.show()
# グリッド線(ls:line style, alpha:透明度)
plt.grid(ls=':', alpha=0.5)
基本に戻る

初期設定

rcParams(外部リンク):https://matplotlib.org/stable/api/matplotlib_configuration_api.html#default-values-and-styling

・初期設定
import matplotlib as mpl
import matplotlib.pyplot as plt
# グラフサイズ
print(mpl.rcParams['figure.figsize'])
print(plt.rcParams["figure.figsize"])
初期設定に戻る

スタイル

・スタイル
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)
y = np.arange(10)

print('使えるスタイル')
print(plt.style.available, '\n')

print('dark_background')
plt.style.use('dark_background')
plt.plot(x, y)
plt.show()
スタイルに戻る

レイアウト調整

シンプル  詳細 


・シンプル
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

# サイズ
plt.figure(figsize=(5,3))

# プロット、凡例用ラベル
plt.plot(x, y, label='y')
plt.plot(x, y**2, label='y**2')

# タイトル、軸ラベル
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')

# 目盛り表示に角度つける
plt.xticks(rotation=30)
# 目盛りの非表示
# plt.xticks([])

# 凡例表示
plt.legend()

plt.show()
レイアウト調整に戻る ・詳細

tick_params(外部リンク):https://matplotlib.org/3.5.0/api/_as_gen/matplotlib.axes.Axes.tick_params.html#matplotlib.axes.Axes.tick_params

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

# サイズ
fig = plt.figure(figsize=(5,3))

# 始点座標(x,y), 幅(0-1-), 高さ(0-1-)
ax = fig.add_axes([0,0,1,1])
ax.plot(x, y)

# 目盛り設定
ax.set_xticks(list(x))

# 間引き表示
for i, label in enumerate(ax.get_xticklabels()):
    if i%3 == 0:
        continue
    label.set_visible(False)

# タイトル、軸ラベル
ax.set_title('title')
ax.set_xlabel('x')
ax.set_ylabel('y')

# 目盛りラベル角度
ax.tick_params(axis='x', labelrotation=30)

# グラフ追加(始点座標x,y, 幅, 高さ)
ax2 = fig.add_axes([0.1,0.6,0.3,0.3])
ax2.plot(x, y**2)

# タイトル、軸ラベル
ax2.set_title('sub_title')
ax2.set_xlabel('sub_x')
ax2.set_ylabel('sub_y')

# 目盛りの非表示
ax2.get_xaxis().set_ticks([])
# 目盛り・軸ラベルの非表示
# ax2.get_xaxis().set_visible(False)

plt.show()
レイアウト調整に戻る

線種・マーカー

線種・線幅  マーカー 


・線種・線幅
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

plt.plot(x, y)
# 線種、線幅調整
plt.plot(x, y*0.9, ls='--', lw=2)
plt.plot(x, y*0.8, ls=':', lw=4)
plt.plot(x, y*0.7, ls='-.', lw=6)
plt.show()
線種・マーカーに戻る ・マーカー

markers(外部リンク):https://matplotlib.org/stable/api/markers_api.html

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

print('ms default:', mpl.rcParams['boxplot.flierprops.markersize'])
plt.plot(x, y, marker='.')
plt.plot(x, y*0.9, marker='o', ms=8)
plt.plot(x, y*0.8, marker='^', ms=10)
plt.plot(x, y*0.7, marker='s', ms=12)
plt.show()
線種・マーカーに戻る

色・カラーマップ

色名とコード  色の指定  カラーマップ 


・色名とコード

色名(外部リンク):https://matplotlib.org/stable/gallery/color/named_colors.html

import matplotlib as mpl
# 色名と16進数カラーコード
print(mpl.colors.cnames)
色・カラーマップに戻る ・色の指定
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

# カラーストリング
# b:青, g:緑, r:赤, c:シアン, m:マゼンタ, y:黄, k:黒, w:白
plt.plot(x, y, color='y')

# 色名
plt.plot(x, y, color='yellow')

# 16進数カラーコード(RGB)
plt.plot(x, y, color='#ff0')
plt.plot(x, y, color='#ffff00')

plt.show()
色・カラーマップに戻る ・カラーマップ

カラーマップ(外部リンク):https://matplotlib.org/stable/tutorials/colors/colormaps.html#sequential

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)
# カラーマップ
plt.set_cmap(plt.cm.spring)
plt.scatter(x, y, c=y, s=50)
# カラーバー
plt.colorbar()
plt.show()
色・カラーマップに戻る

描画関連

直線  テキスト 


・直線
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

plt.plot(x, y)

# 横線 
# y
plt.axhline(1)
# 範囲指定
# [xmin,xmax], [ymin,ymax]
plt.plot([0,9], [5,5])
# y, xmin, xmax
plt.hlines(8, 3, 5)

# 縦線
# x
plt.axvline(3)
# 範囲指定
# [xmin,xmax], [ymin,ymax]
plt.plot([7,7], [0,5])
# x, ymin, ymax
plt.vlines(5, 2, 4)

plt.show()
描画関連に戻る ・テキスト

pyplot.text(外部リンク):https://matplotlib.org/3.5.0/api/_as_gen/matplotlib.pyplot.text.html

import japanize_matplotlib
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

text = 'text'

plt.figure()
plt.plot(x, y)
# データの数値で指定
plt.title('データの数値で指定')
plt.text(1, 8, text, fontsize=16, color='yellow')
plt.show()
print()

fig, ax = plt.subplots()
ax.plot(x, y)
# 座標比率で指定(0-1-)
ax.set_title('座標比率で指定')
ax.text(0.5, 0.5, text, fontsize=20, color='yellow', 
        transform=ax.transAxes)
plt.show()
描画関連に戻る

ラベルと凡例
・ラベルと凡例
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

# lebel引数は凡例ラベル
plt.plot(x, y, label='y')
plt.plot(x, y**2, label='y**2')
# 軸ラベル
plt.xlabel('xlabel')
plt.ylabel('ylabel')

# 指定なし(default='best')
# plt.legend()

# 数値で指定
# 0:最良, 1:右上(default), 2:左上, 3:左下, 4:右下, 5:右, 
# 6:左中, 7:右中, 8:中下, 9:中上, 10:中央
# plt.legend(loc=1)

# 座標で指定
plt.legend(loc=(1.05, 0.8))

plt.show()
ラベルと凡例に戻る

ヒストグラム
・ヒストグラム
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.random.randn(10000)
# ec: edge color
plt.hist(x, bins=50, ec='b');
ヒストグラムに戻る

散布図
・散布図
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

# loc:平均, scale:標準偏差, size:数
x = np.random.normal(1, 1, 100)
y = np.random.normal(1, 1, 100)

# colorbar用データ
c = np.arange(100)

# バブル用データ(size)
b = np.random.rand(100)*100

plt.scatter(x, y, c=c, s=b, cmap='spring')
plt.colorbar();
散布図に戻る

棒グラフ

通常  複数グループ  積み上げ 


・通常
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = [1,2,3,4]
y = [4,2,6,3]

fig, ax = plt.subplots(1,2, figsize=(10,4))
ax[0].bar(x, y)
ax[0].set_title('bar')
ax[1].barh(x, y)
ax[1].set_title('barh');
棒グラフに戻る ・複数グループ
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = [1,2]
y1, y2, y3 = [1,2], [2,4], [3,6]
# 表示幅
w = 0.3

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
# x軸の値をwずらして並べて表示させる
ax.bar(np.array(x)-w, y1, width=w, label='y1')
ax.bar(x, y2, width=w, label='y2')
ax.bar(np.array(x)+w, y3, width=w, label='y3')
ax.set_xticks([1,1,1,2,2,2])
plt.legend();
棒グラフに戻る ・積み上げ
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(5)
y1, y2, y3 = np.random.rand(15).reshape((3,5))

plt.bar(x, y1, label='y1')
plt.bar(x, y2, bottom=y1, label='y2')
plt.bar(x, y3, bottom=y1+y2, label='y3')
plt.legend();
棒グラフに戻る

その他のグラフ

箱ひげ図  円グラフ 


・箱ひげ図
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.random.normal(0, 1, 100)
y = np.random.normal(0, 1, 100)
plt.boxplot([x, y], labels=['x', 'y']);
その他のグラフに戻る ・円グラフ
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

rate_list = [0.5, 0.3, 0.1, 0.1]
labels = ['A', 'B', 'C', 'D']
plt.pie(rate_list, labels=labels);
その他のグラフに戻る

subplot(複数グラフ)
・subplot(複数グラフ)
import japanize_matplotlib
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

fig, ax = plt.subplots(1,2, figsize=(10,5))
ax[0].plot(x, y)
ax[1].plot(x, y)
fig.suptitle('全体のタイトル')
plt.show()
print()

# 複数行(subplots)
fig, ax = plt.subplots(2,2, figsize=(10,5))
ax[0,0].plot(x, y)
ax[0,1].plot(x, y)
ax[1,0].plot(x, y**2)
ax[1,1].plot(x, y**2)
# 余白調整
# left-top: 全体としての位置
# wspace, hspace: 個々のグラフ間余白
# 初期値確認
# import matplotlib as mpl; mpl.rcParams["figure.subplot.left"]
# fig.subplots_adjust(left=0.125, right=0.9, bottom=0.125, top=0.88,
#                     wspace=0.2, hspace=0.2)
fig.suptitle('複数行(subplots)')
plt.show()
print()

# add_subplot
fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(121)
ax1.plot(x, y**2)
ax2 = fig.add_subplot(122)
ax2.plot(x, y**2)
fig.suptitle('add_subplot')
plt.show()
print()

# subplot
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.plot(x, y**0.5)
plt.subplot(1,2,2)
plt.plot(x, y**0.5)
plt.suptitle('subplot')
plt.show()
subplot(複数グラフ)に戻る

x軸共有y2軸表示

twinx  pandas 


・twinx
import numpy as np
from matplotlib.image import imread
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

fig, ax1 = plt.subplots()
l1, = ax1.plot(x, y, c='lightblue', label='y')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax2 = ax1.twinx()
l2, = ax2.plot(y**2, c='pink', label='y**2')
ax2.set_ylabel('y**2')
ax1.legend(handles=[l1, l2])
plt.show()
x軸共有y2軸表示に戻る ・pandas
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.style.use('dark_background')

df = pd.DataFrame({'x': np.arange(10),
                    'y': np.arange(10),
                    'y**2': np.arange(10)**2})
df.plot(x='x', secondary_y='y**2');
x軸共有y2軸表示に戻る

画像の表示
・画像の表示
import numpy as np
from matplotlib.image import imread
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)

plt.plot(x, y**2)
plt.savefig('test.png')
plt.close()

img = imread('test.png')
plt.axis('off')
plt.imshow(img)

# 並べて表示
plt.figure(figsize=(10,3))
for i in range(10):
    plt.subplot(2, 5, i+1)
    # img[i]などで画像を変更可
    plt.axis('off')
    plt.imshow(img, cmap='gray')
plt.tight_layout()
画像の表示に戻る

保存
・保存
import numpy as np
from matplotlib.image import imread
import matplotlib.pyplot as plt
plt.style.use('dark_background')

x = np.arange(10)
y = np.arange(10)
plt.plot(x, y**2)
# dpi(dot per inch): 1インチあたりの解像度
plt.savefig('test.png', dpi=100)
# レイアウト調整
plt.close()

img = imread('test.png')
plt.imshow(img)
plt.axis('off')
plt.show()
画像の表示に戻る

日本語表示
・日本語表示
import japanize_matplotlib
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

plt.title('日本語表示')
plt.text(0.5, 0.5, 'にほんご', fontsize=20, ha='center')
plt.show()
日本語表示に戻る

その他

対数軸  塗りつぶす  gridspec(柔軟レイアウト) 


・対数軸
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('dark_background')

x = np.arange(10)
y = 10**x

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_yscale('log')
plt.show()
その他に戻る ・塗りつぶす
import matplotlib.pyplot as plt
plt.style.use('dark_background')

# x, y1, y2(y1とy2の間を塗りつぶす)
plt.fill_between([1,2,3], [2,4,6], [0,0,0])
plt.show()
その他に戻る ・gridspec(柔軟レイアウト)
# gridspec: 複数グラフを場所・範囲を指定して表示
import japanize_matplotlib
import matplotlib.gridspec as gridspec
import numpy as np

x = np.arange(10)
y = np.arange(10)

# サンプル1
fig = plt.figure()
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :2])
ax2 = plt.subplot(gs[1:, :2])
ax3 = plt.subplot(gs[:, 2:])
ax1.plot(x, y)
ax2.plot(x, y**2)
ax3.plot(x, y**0.5)
fig.suptitle('サンプル1')
fig.tight_layout()
plt.show()
print()

# サンプル2
fig = plt.figure() 
gs = gridspec.GridSpec(2, 3, height_ratios=[4,1], width_ratios=[2,4,2]) 
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])
ax4 = fig.add_subplot(gs[3])
ax5 = fig.add_subplot(gs[4])
ax6 = fig.add_subplot(gs[5])
ax1.plot(x,y)
ax2.plot(x,y**2)
ax3.plot(x,y**3)
ax4.plot(x,y**0.5)
ax5.plot(x,y*2)
ax6.plot(x,y*0.5)
fig.suptitle('サンプル2')
fig.tight_layout()
その他に戻る