python堆积条形图渐变_在matplotlib中创建发散堆积条形图

我需要为一些likert数据制作一个发散条形图。我用的是熊猫,但如果没有熊猫的话,方法可能会相似。关键机制是在开始时添加一个不可见的缓冲区。在likert_colors = ['white', 'firebrick','lightcoral','gainsboro','cornflowerblue', 'darkblue']

dummy = pd.DataFrame([[1,2,3,4, 5], [5,6,7,8, 5], [10, 4, 2, 10, 5]],

columns=["SD", "D", "N", "A", "SA"],

index=["Key 1", "Key B", "Key III"])

middles = dummy[["SD", "D"]].sum(axis=1)+dummy["N"]*.5

longest = middles.max()

complete_longest = dummy.sum(axis=1).max()

dummy.insert(0, '', (middles - longest).abs())

dummy.plot.barh(stacked=True, color=likert_colors, edgecolor='none', legend=False)

z = plt.axvline(longest, linestyle=' ', color='black', alpha=.5)

z.set_zorder(-1)

plt.xlim(0, complete_longest)

xvalues = range(0,complete_longest,10)

xlabels = [str(x-longest) for x in xvalues]

plt.xticks(xvalues, xlabels)

plt.show()

这种方法有许多局限性。首先,条形图不再有黑色轮廓,而图例将有一个额外的空白元素。我只是隐藏了图例(我想可能有一种方法可以只隐藏单个元素)。我不确定是否有一种方便的方法使这些条有一个轮廓,而不将轮廓添加到缓冲元素中。在

首先,我们建立一些颜色和虚拟数据。然后我们计算左边两列的宽度和最中间一列的一半(我知道分别是“SD”、“D”和“N”)。我找到最长的列,并使用它的宽度来计算其他列所需的差异。接下来,我将这个新的buffer列插入第一列的位置,标题为空(这让我觉得很恶心,让我告诉你)。为了更好地度量,我还根据[2]的建议在中间条的中间位置后面添加了一条垂直线(axvline)。最后,我通过偏移x轴的标签来调整x轴,使其具有适当的比例。在

你可能想要更多的水平空间在左边-你可以很容易地这样做添加到“最长”。在

[2]海伯格、理查德·M.和纳奥米·B·罗宾斯。”利克特量表和其他应用的发散堆积条形图设计〉,《统计软件杂志》57.5(2014):1-32。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值