【发布时间】: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