【问题标题】:Matplotlib/Seaborn: Boxplot collapses on x axisMatplotlib/Seaborn:箱线图在 x 轴上折叠
【发布时间】:2019-12-07 18:38:37
【问题描述】:

我正在创建一系列箱线图,以便相互比较不同的癌症类型(基于 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)

【问题讨论】:

  • 我不完全清楚您的代码如何生成您在开始时显示的数字。根据您的代码,无论数据框的内容如何,​​您都应该始终获得 10x10 的数字
  • 啊,很好,这可能会让其他人感到困惑,我截取了这两个图并将它们作为一个图上传,以消除尽可能多的空白我将上传另一个图
  • 您的玩具数据集和代码不会重现该问题。请查看Minimal, Complete, and Verifiable example
  • @Diziet 也试图在玩具数据集中重现问题……我意识到问题不是数据而是情节标题(见更新)。无论如何,感谢您推动我提供一个玩具示例

标签: matplotlib seaborn


【解决方案1】:

如果没有数据进行测试,很难确定,但我认为您可以将类别/癌症的名称传递给 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'])

【讨论】:

  • 感谢您的第一个想法,但不幸的是,这并没有解决我的问题(请参阅更新的问题)。当我找到时间时,我将提供一些示例数据集。哪里是上传/托管它们的好地方?
  • 如果数据集非常大,最好创建一个“玩具”数据集(即使用 np.random.random()np.random.normal() 之类的东西来创建具有相同一般形状的数据框并重现你面临的问题。见Minimal, Complete, and Verifiable exampleHow to make good reproducible pandas examples
  • 我即将创建一个玩具数据集 - 敬请期待
猜你喜欢
  • 2016-06-22
  • 1970-01-01
  • 2023-04-10
  • 2021-06-24
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
相关资源
最近更新 更多