logo

Python matplotlibでボックスプロットを描く方法 📂プログラミング

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

一緒に見る