Matplotlib / Seaborn:Boxplot在x轴上折叠

时间:2019-07-30 11:22:19

标签: matplotlib seaborn

我正在创建一系列箱线图,以便将不同类型的癌症相互比较(基于5个类别)。对于绘图,我使用seaborn / matplotlib。它适用于大多数癌症类型(请参见右图),但是在某些x轴上会稍微塌陷(请参见左图)或严重塌陷(请参见中图) https://i.imgur.com/dxLR4B4.png

研究代码中seaborn如何绘制盒子/小提琴图https://github.com/mwaskom/seaborn/blob/36964d7ffba3683de2117d25f224f8ebef015298/seaborn/categorical.py(第961行)

violin_data = remove_na(group_data[hue_mask])

我意识到,当nan太多时就会发生这种情况

是否有可能仅通过代码阻止这种崩溃 我不想修改数据框(将nans替换为零)

在下面找到我的代码:

boxp_df=pd.read_csv(pf_in,sep="\t",skip_blank_lines=False)
fig, ax = plt.subplots(figsize=(10, 10))
sns.violinplot(data=boxp_df, ax=ax)
plt.xticks(rotation=-45)
plt.ylabel("label")
plt.tight_layout()
plt.savefig(pf_out)

输出是每个癌症类型的大小不同的图 (取决于是否有完全属于nan的类别) 我希望每个图都具有相同的宽度。

更新 尝试按建议使用order参数将导致以下输出: https://i.imgur.com/uSm13Qw.png

也许这个玩具例子有帮助?

|Cat1|Cat2|Cat3|Cat4|Cat5
|3.93|    |0.52|    |6.01
|3.34|    |0.89|    |2.89
|3.39|    |1.96|    |4.63
|1.59|    |3.66|    |3.75
|2.73|    |0.39|    |2.87
|0.08|    |1.25|    |-0.27

更新 显然,问题不是数据,而是标题的长度 https://github.com/matplotlib/matplotlib/issues/4413

因此,我将结束问题 @Diziet我应该删除它还是我的问题可能对其他人有帮助? 抱歉,代码示例中未包含以下行:

ax.set_title("VERY LONG TITLE", fontsize=20)

1 个答案:

答案 0 :(得分:0)

很难确定没有数据可以对其进行测试,但是我认为您可以将类别/癌症的名称传递给order=参数。这会迫使Seaborn使用/显示这些内容,即使它们为空。

例如:

tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", data=tips, order=['Thur','Fri','Sat','Freedom Day','Sun','Durin\'s Day'])

enter image description here