首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在海上小提琴编曲中为每一组分配不同的位置

如何在海上小提琴编曲中为每一组分配不同的位置
EN

Stack Overflow用户
提问于 2018-10-09 12:01:48
回答 1查看 2.7K关注 0票数 5

小提琴作图的形状有助于可视化分组数据的数据分布。每组的大小也可以被想象为“小提琴”的区域。

但是,当数据是异构的时,特定组的width太小,无法显示任何意义信息(图1中的Fri组)。在海运小提琴图中有width选项,用于扩大绘图的大小。

然而,一旦小尺寸组扩大到适当的规模,大的组就会变得“太大”(图2中的Sat组)并相互重叠。

因此,我的问题是如何在海运.中为小提琴的情节分配不同的开口距离。

演示

代码,用于生成图1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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轴中的类别数据映射为不同距离的数字形式。
代码语言:javascript
复制
tips["day_n"] = tips["day"].map(dict(zip(tips["day"].unique(), [1, 2, 4, 6])))

但似乎海运不支持数字数据,组之间的距离保持不变或混乱,当切换x,y轴。

代码,用于生成图3:

代码语言:javascript
复制
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

  • 堆栈溢出中类似的question,表示matplotlib有positions选项。但这也不是海运的工作。
EN

回答 1

Stack Overflow用户

发布于 2018-10-09 21:07:39

使用order参数可以实现x轴上的[1, 2, 4, 6]位置:

代码语言:javascript
复制
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()

这里的结果是:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52720616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档