Python の通常の matplotlib boxplot コマンドは、ボックス、中央値、ウィスカー、フライヤー、およびキャップのキーを含む辞書を返します。これにより、スタイリングが非常に簡単になります。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Create a dataframe and subset it for a boxplot
df1 = pd.DataFrame(rand(10), columns=['Col1'] )
df1['X'] = pd.Series(['A','B','A','B','A','B','A','B','A','B'])
boxes= [df1[df1['X'] == 'A'].Col1, df1[df1['X'] == 'B'].Col1]
# Call the standard matplotlib boxplot function,
# which returns a dictionary including the parts of the graph
mbp = plt.boxplot(boxes)
print(type(mbp))
# This dictionary output makes styling the boxplot easy
plt.setp(mbp['boxes'], color='blue')
plt.setp(mbp['medians'], color='red')
plt.setp(mbp['whiskers'], color='blue')
plt.setp(mbp['fliers'], color='blue')
Pandas ライブラリには、グループ化された (階層的にインデックス化された) データフレーム用の「最適化された」boxplot 関数があります。ただし、グループごとに複数の辞書を返す代わりに、matplotlib.axes.AxesSubplot オブジェクトを返します。これはスタイリングを非常に困難にします。
# Pandas has a built-in boxplot function that returns
# a matplotlib.axes.AxesSubplot object
pbp = df1.boxplot(by='X')
print(type(pbp))
# Similar attempts at styling obviously return TypeErrors
plt.setp(pbp['boxes'], color='blue')
plt.setp(pbp['medians'], color='red')
plt.setp(pbp['whiskers'], color='blue')
plt.setp(pbp['fliers'], color='blue')
pandas df.boxplot(by='X') 関数によって生成されたこの AxisSubplot オブジェクトはアクセス可能ですか?