Python matplotlibでボックスプロットを描く方法
説明
plt.boxplot()
でボックスプロットを描くことができる。デフォルト設定で描くと、何の色もない白いボックスに黒い線だけ表示されるから、綺麗に描きたいなら、面倒でも直接設定しなければならない。
コード
基本
import numpy as np
import matplotlib.pyplot as plt
x = 100*np.random.random_sample(100)
y = 50*np.random.random_sample(100) + 50
z = np.concatenate((x,y))
plt.boxplot([x,y,z])
plt.show()
凡例
fig, ax = plt.subplots()
bp1 = ax.boxplot(x, positions=[1])
bp2 = ax.boxplot(y, positions=[2])
bp3 = ax.boxplot(z, positions=[3])
ax.legend([bp1["boxes"][0], bp2["boxes"][0], bp3["boxes"][0]], ['x', 'y', 'z'], loc='upper right')
plt.show()
色
以下の設定を適用するためには、boxplot
オプションでpatch_artist=True
を設定する必要がある。オプションは以下の通り。
boxprops=dict(facecolor='',color='')
: ボックススタイルfacecolor
: ボックスの内側の色color
: ボックスの枠の色
capprops = dict(color='')
: 最上(下)端横線の色whiskerprops = dict(color='')
: ヒゲ(ボックスの上下の線)の色medianprops = dict(color='')
: 中央値を示す横線の色meanprops = dict(marker='o', markerfacecolor='', markeredgecolor='')
: 平均のスタイルmarker
: マーカーの形markerfacecolor
: マーカーの内側の色markeredgecolor
: マーカーの枠の色
fig, ax = plt.subplots()
bp1 = ax.boxplot(x, positions=[1], showmean=True, patch_artist = True,
boxprops = dict(facecolor='pink',color='red'),
capprops = dict(color='red'),
whiskerprops = dict(color='red'),
medianprops = dict(color='red'),
meanprops = dict(marker='o',markerfacecolor='red', markeredgecolor='red'))
bp2 = ax.boxplot(y, positions=[2], showmean=True, patch_artist = True,
boxprops = dict(facecolor='lightblue',color='blue'),
capprops = dict(color='blue'),
whiskerprops = dict(color='blue'),
medianprops = dict(color='blue'),
meanprops = dict(marker='o',markerfacecolor='blue', markeredgecolor='blue'))
bp3 = ax.boxplot(z, positions=[3], showmean=True, patch_artist = True,
boxprops = dict(facecolor='lightgreen',color='green'),
capprops = dict(color='green'),
whiskerprops = dict(color='green'),
medianprops = dict(color='green'),
meanprops = dict(marker='o',markerfacecolor='green', markeredgecolor='green'))
ax.legend([bp1["boxes"][0], bp2["boxes"][0], bp3["boxes"][0]], ['x', 'y', 'z'], loc='upper right')
plt.show()
環境
- OS: Windows11
- Version: Python 3.9.13, matplotlib==3.6.2, numpy==1.23.5
一緒に見る