带有seaborn的可变宽度条形图

时间:2017-10-16 23:22:46

标签: python seaborn

我正在尝试在Seaborn中创建一个带有可变宽度x轴箱的条形图。与此图表类似: enter image description here 我的所有x宽度将加起来达到100%,但我似乎无法找到如何通过Seaborn实现此目标的示例。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

这里可能有几个可能的答案。在seaborn barplot中,您可以为此目的使用几个参数的组合:"宽度" (条的宽度值),"左边" (x轴上的位置值,这是一个强制性参数)和"对齐"。

一个非常简单的例子:

import seaborn as sns

data = [7, 3, 15]
widths = [1, 5, 3]
left = [0, 1, 6]
sns.plt.bar(left, data, width = widths, color=('orange','green','blue'), 
alpha = 0.6, align='edge', edgecolor = 'k', linewidth = 2)

请注意"左" (条形的位置)应该对应于宽度,以便条形只是触摸而不重叠。

enter image description here

答案 1 :(得分:0)

如果你想在条形图中使用Seaborn,你需要在之后更改条形矩形(补丁)的宽度(这是通过matplotlib面向对象的界面按照this answer完成的):

import seaborn as sns

iris = sns.load_dataset('iris')
ax = sns.barplot('species', 'sepal_width', data=iris)
widthbars = [0.3, 0.6, 1.2]
for bar, newwidth in zip(ax.patches, widthbars):
    x = bar.get_x()
    width = bar.get_width()
    centre = x + width/2.
    bar.set_x(centre - newwidth/2.)
    bar.set_width(newwidth)

enter image description here

您还可以直接在matplotlib中创建类似的条形图:

import matplotlib.pyplot as plt

widths = [0.3, 0.6, 1.2]
for x_pos, (species_name, species_means) in enumerate(iris.groupby('species').mean().groupby('species')):
     plt.bar(x_pos, species_means['sepal_width'], widths[x_pos])

enter image description here