【发布时间】:2019-03-14 04:59:09
【问题描述】:
小提琴图的形状对于可视化分组数据的数据分布很有用。每组的大小也可以可视化为“小提琴”的面积。
但是当数据异构时,某个组的width太小而无法显示任何意义信息(图1中的Fri组)。 seaborn violinplot 中有width 选项用于扩大情节的大小。
但是,一旦将小尺寸的组放大到合适的比例,大的就会变得“太大”(图2中的Sat组)并相互重叠。
因此,我的问题是如何为 seaborn 中的小提琴图分配不同的间隙距离。
演示
生成图 1 的代码:
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="sex",
data=tips, palette="Set2", split=True,
scale="count", inner="stick",
scale_hue=False, bw=.2)
图1
生成图2的代码:
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="sex",
data=tips, palette="Set2", split=True,
scale="count", inner="stick", width=2.5
scale_hue=False, bw=.2)
图2
你的解决方案是什么?
第一次尝试是增加图形宽度,但它看起来很糟糕,并且在图形中留下了太多的空白。
我尝试将 x 轴上的类别数据映射为数字形式,它们之间的距离不同。
tips["day_n"] = tips["day"].map(dict(zip(tips["day"].unique(), [1, 2, 4, 6])))
但是seaborn好像不支持数值数据,切换x、y轴时组间的距离保持不变或乱七八糟。
生成图 3 的代码:
ax = sns.violinplot(y="day_n", x="total_bill", hue="sex",
data=tips, palette="Set2", split=True,
scale="count", inner="stick", width=2.5,
scale_hue=False, bw=.2)
图3
- stackoverflow中类似question,表示matplotlib有
positions选项。但它也不适用于 seaborn。
【问题讨论】:
-
另一种方法是更改您的
scale参数。将其设置为'area'或'width'可能是适合您的解决方案。 -
@busybear 它会起作用,但这意味着删除组大小信息。这是为了避免问题而不是解决问题
标签: python pandas matplotlib data-visualization seaborn