gpt4 book ai didi

python - 如何在 seaborn fiddle 情节中为每个组分配不同的位置

转载 作者:行者123 更新时间:2023-11-28 18:07:23 24 4
gpt4 key购买 nike

fiddle 图的形状对于可视化分组数据的数据分布很有用。每个组的大小也可以可视化为“ fiddle ”的面积。

但当数据异构时,某些组的width太小,无法显示任何意义信息(图1中的Fri组)。 seaborn violinplot 中有 width 选项,用于扩大绘图的大小。

但是,一旦小尺寸的组放大到合适的比例,大的就会变得“太大”(图 2 中的 Sat 组)并相互重叠。

因此,我的问题是如何在 seaborn 中为 fiddle 图分配不同的间隙距离。

The demo

生成图 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

fig1

生成图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

fig2

What is your solution?

  • 第一次尝试是增加图形宽度,但它看起来很糟糕并且在图形中留下了太多的空白。

  • 我尝试将 x 轴上的类别数据映射为数字形式,它们之间的距离不同。

tips["day_n"] = tips["day"].map(dict(zip(tips["day"].unique(), [1, 2, 4, 6])))

但是好像seaborn不支持数字数据,在切换x,y轴的时候,group之间的距离保持不变或者乱了。

生成图 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

fig3

  • 类似 question在 stackoverflow 中,表明 matplotlib 有 positions 选项。但这对 seaborn 也不起作用。

最佳答案

使用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()

这里是结果:violinplot

关于python - 如何在 seaborn fiddle 情节中为每个组分配不同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52720616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com