gpt4 book ai didi

python - 更改 pandas boxplot 子图中各个框的颜色

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:34 42 4
gpt4 key购买 nike

这是引用以下问题,其中讨论了调整标题和子图布局的选项: modify pandas boxplot output

我的要求是更改每个子图中各个框的颜色(如下所示):

Something like this

以下是共享链接中可用于调整子图的标题和轴属性的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(140, 4), columns=['A', 'B', 'C', 'D'])
df['models'] = pd.Series(np.repeat(['model1','model2', 'model3', 'model4', 'model5', 'model6', 'model7'], 20))
bp = df.boxplot(by="models",layout=(4,1),figsize=(6,8))
[ax_tmp.set_xlabel('') for ax_tmp in np.asarray(bp).reshape(-1)]
fig = np.asarray(bp).reshape(-1)[0].get_figure()
fig.suptitle('New title here')
plt.show()

我尝试使用: ax.set_facecolor('颜色')属性,但未成功获得所需的结果。

我也尝试访问 bp['boxes'] 但显然它不可用。我需要了解存储在 bp 中的数据结构,以便访问子图中的各个框。

期待

P.S:我知道 seaborn。但目前需要使用 df.boxplot 来理解和实现。谢谢

最佳答案

要调整 pandas.boxplot 中框的颜色,您必须稍微调整代码。首先,您必须告诉 boxplot 用一种颜色实际填充方框。您可以通过指定 patch_artist = True 来执行此操作,如文档中所述 here .但是,您似乎无法指定颜色(默认为蓝色)——如果我错了,请任何人纠正我。这意味着您之后必须更改颜色。幸运的是,pandas.boxplot 提供了一个简单的选项,通过指定 return_type = 'both' see here 将箱线图中的艺术家作为返回值。寻求解释。您得到的是一个 pandas.Series,其键根据您的 DataFrame 列和值,这些值是包含箱线图所在的 Axes 实例的元组绘制和字典中箱线图的实际元素。我认为代码是不言自明的:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import PathPatch

df = pd.DataFrame(np.random.rand(140, 4), columns=['A', 'B', 'C', 'D'])

df['models'] = pd.Series(np.repeat(['model1','model2', 'model3', 'model4', 'model5', 'model6', 'model7'], 20))

bp_dict = df.boxplot(
by="models",layout=(4,1),figsize=(6,8),
return_type='both',
patch_artist = True,
)

colors = ['b', 'y', 'm', 'c', 'g', 'b', 'r', 'k', ]
for row_key, (ax,row) in bp_dict.iteritems():
ax.set_xlabel('')
for i,box in enumerate(row['boxes']):
box.set_facecolor(colors[i])

plt.show()

结果图如下所示:

result of the above code

希望这对您有所帮助。

关于python - 更改 pandas boxplot 子图中各个框的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50963960/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com