Cha*_* Ye 6 python matplotlib pandas seaborn violin-plot
小提琴图的形状对于可视化分组数据的数据分布很有用。每组的大小也可以可视化为“小提琴”的面积。
\n但是当数据是异构的\xef\xbc\x8c时,width某些组的数据太小而无法显示任何有意义的信息(图1中的Fri组)。可以选择width放大seaborn.violinplot绘图的大小。
然而,一旦小规模的群体扩大到合适的规模,大群体就会变得“太大”(图2中的Sat群体)并相互重叠。
\n因此,我的问题是如何为seaborn中的小提琴图分配不同的间隙距离。
\n\n\n演示
\n
生成图 1 的代码:
\nimport seaborn as sns\n\ntips = sns.load_dataset("tips")\nax = sns.violinplot(x="day", y="total_bill", hue="sex",\n data=tips, palette="Set2", split=True,\n scale="count", inner="stick",\n scale_hue=False, bw=.2)\nRun Code Online (Sandbox Code Playgroud)\n
生成图2的代码:
\nimport seaborn as sns\n\ntips = sns.load_dataset("tips")\nax = sns.violinplot(x="day", y="total_bill", hue="sex",\n data=tips, palette="Set2", split=True,\n scale="count", inner="stick", width=2.5\n scale_hue=False, bw=.2) \nRun Code Online (Sandbox Code Playgroud)\n
\n\n你的解决方案是什么?
\n
第一次尝试是增加图形宽度,但它看起来很糟糕,并且在图形中留下太多空白。
\n我尝试将 x 轴上的类别数据映射为数字形式,并且它们之间的距离不同。
\ntips["day_n"] = tips["day"].map(dict(zip(tips["day"].unique(), [1, 2, 4, 6])))\nRun Code Online (Sandbox Code Playgroud)\n但seaborn似乎不支持数值数据,当切换x、y轴时,组之间的距离保持不变或混乱。
\n生成图 3 的代码:
\nax = sns.violinplot(y="day_n", x="total_bill", hue="sex",\n data=tips, palette="Set2", split=True,\n scale="count", inner="stick", width=2.5,\n scale_hue=False, bw=.2)\nRun Code Online (Sandbox Code Playgroud)\n
positionsmatplotlib的选项。但这对seaborn来说也不起作用。使用该order参数可以获得[1, 2, 4, 6]x轴上的位置:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3568 次 |
| 最近记录: |