matplotlib 如何制作多组带颜色的箱线图

uxhixvfz  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(106)

我一直在尝试制作一个分为3个部分的图,每个部分都有2个子部分,每个子部分都应该包含不同的颜色,就像下面的图片一样,我无法让它工作。
我使用这组样本数据:

year_2050_model1 = [50.2, 45,55]
year_2050_shift_model1 = np.array(year_2050_model1)+ 1.5

year_2100_model1 = [45, 43, 46]
year_2100_shift_model1 = np.array(year_2100_model1) + 1.5

####################################################################

year_2050_model2 = [56.2, 49,53]
year_2050_shift_model2 = np.array(year_2050_model2)+ 1.5

year_2100_model2 = [43, 48, 41]
year_2100_shift_model2 = np.array(year_2100_model2) + 1.5

historical = [50, 49,55]
observed = [54, 46,58 ]

字符串
我可以单独绘制每个模型,但是将其设置为像图片一样的格式不起作用,有没有人对如何让它工作/包尝试有任何建议?
谢谢你的好意
我试过把所有的数据都放到一个数据集中并绘制出来,但是Seaborn会把数据重叠在一起,而Matplotlib不允许我把正确的部分放在一起,也不允许我消除正常模型和移位模型之间差距

tgabmvqs

tgabmvqs1#

您可以在matplotlib中使用positions argumet作为ax.boxplot方法:

info = {
    0: (historical, "historical"),
    1: (observed, "observed"),
    4: (year_2050_model1, "2050: M1"),
    5: (year_2050_model1, "2050: M1 Shift"),
    7: (year_2050_model2, "2050: M2"),
    8: (year_2050_model2, "2050: M2 Shift"),
    11: (year_2100_model1, "2100: M1"),
    12: (year_2100_model1, "2100: M1 Shift"),
    14: (year_2100_model2, "2100: M2"),
    15: (year_2100_model2, "2100: M2 Shift"),

}

fig, ax = plt.subplots(figsize=(5, 3))

for k, (data, label) in info.items():
    ax.boxplot(data, positions=[k])

ax.set_xticks([k for k in info.keys()])
ax.set_xticklabels([v[1] for v in info.values()], rotation=90)

for i in (2.5, 9.5):
    ax.vlines(i, 40, 60, linestyles="--")

字符串
可以根据需要调整颜色和位置,方法是更改info字典以在元组值中包含其他项,并在ax.boxplot调用中使用这些项


的数据

相关问题