为了账号安全,请及时绑定邮箱和手机立即绑定

在 Matplotlib 中使用 twinx 时条形图的奇怪行为

在 Matplotlib 中使用 twinx 时条形图的奇怪行为

HUX布斯 2021-12-09 18:30:57
我已经为此奋斗了太久,以至于我很确定我不了解twinxmatplotlib 中的实现好的,我有一些代码import matplotlib.pyplot as pltdata1 = [5, 6, 6, 7]err1 = [1, 1, 1, 1]data2 = [0.5, 0.6]err2 = [0.01, 0.01]label1 = ['var1', 'var2', 'var3', 'var4']label2 = ['var5', 'var6']如果我只想绘制数据 1 一切都很好。fig, ax1 = plt.subplots()ax1.bar(label1, data1, yerr=err1, color='red')plt.show()这给了我一个漂亮的图表如果我想将数据 2 添加到第二个轴上,我会丢失列并且顺序也很奇怪。ax1.bar(label1, data1, yerr=err1, color='red')ax2 = ax1.twinx()ax2.bar(label2, data2, yerr=err2, color='blue')plt.show()没有给我六列而是只有 4 列,现在缺少两个 data1 列?显然我 100% 肯定这是我的错,但请有人让我摆脱这种痛苦......
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

你也可以这样做:


label = ['var1', 'var2', 'var3', 'var4', 'var5', 'var6']

data1 = [5, 6, 6, 7, np.NaN, np.NaN]

data2 = [np.NaN, np.NaN, np.NaN, np.NaN, 0.5, 0.6]

这里的问题是 matplotlib 轴转换为整数:'var1'->1、'var2'->2 等,并且ax2是一个新轴所以 'var4'->1、'var5'->2 并且你得到重叠。使双轴之间的类别相同可以消除这种混淆。


查看完整回答
反对 回复 2021-12-09
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

问题是您的条形重叠,因此您看到的条形少了两个。解决方案是使用定义明确的 x 值来定位条形图,然后在双轴上绘制后,分配 x 刻度标签。


import matplotlib.pyplot as plt


data1 = [5, 6, 6, 7]

err1 = [1, 1, 1, 1]

data2 = [0.5, 0.6]

err2 = [0.01, 0.01]


label1 = ['var1', 'var2', 'var3', 'var4']

label2 = ['var5', 'var6']


fig, ax1 = plt.subplots()

ax1.bar(range(len(label1)), data1, yerr=err1, color='red')


ax2 = ax1.twinx()

ax2.bar(range(4,6), data2, yerr=err2, color='blue')

ax2.set_xticks(range(6))

ax2.set_xticklabels(label1+label2)

plt.show()

//img1.sycdn.imooc.com//61b1db1f00016d5003990268.jpg

查看完整回答
反对 回复 2021-12-09
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信