小提琴图的形状对于可视化分组数据的数据分布非常有用。每个组的大小也可以被可视化为“小提琴”的面积。
但是当数据是异质的时,某个组的width
太小而不能显示任何有意义的信息(图1中的Fri组)。seaborn.violinplot
中有width
选项用于放大图的大小。
然而,一旦小规模的组被扩大到合适的规模,大的组将变得“太大”(图2中的Sat组)并且彼此重叠。
因此,我的问题是如何分配不同的间距小提琴情节在海上。
演示
图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轴上的类别数据Map为数值形式,它们之间的距离不同。
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中也没有。
1条答案
按热度按时间sg3maiej1#
使用
order
参数可以实现x轴上的[1, 2, 4, 6]
位置:结果如下: