小提琴图的形状对于可视化分组数据的数据分布很有用。每个组的大小也可以可视化为“小提琴”的面积。
但是,当数据异构时,某些组的width
太小而无法显示任何含义信息(图1中的Fri组)。 seaborn小提琴图中有width
个选项,可以放大图的大小。
但是,一旦将小尺寸的组放大到合适的比例,大的组将变得“太大”(图2中的星期六组)并相互重叠。
因此,我的问题是如何为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)
用于生成图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)
您的解决方案是什么?
第一个尝试是增加图形的宽度,但它看起来很糟糕,并且在图形中留下了太多的空白。
我试图将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)
positions
选项。但这对seaborn也不起作用。答案 0 :(得分:1)
使用order
参数可以达到x轴上的[1, 2, 4, 6]
位置:
import seaborn as sns, matplotlib.pyplot as plt
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, width=2.5,
order=('Thur', 'Fri', '', 'Sat', '', 'Sun'))
# get rid of ticks for empty columns (levels)
ax.set_xticks([0,1,3,5])
ax.set_xticklabels(['Thur', 'Fri', 'Sat', 'Sun'])
plt.show()