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

我已经为此奋斗了太久,以至于我很确定我不了解twinxmatplotlib 中的实现


好的,我有一些代码


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']

如果我只想绘制数据 1 一切都很好。


fig, ax1 = plt.subplots()

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

plt.show()

这给了我一个漂亮的图表

http://img.mukewang.com/61b1daf90001215705980438.jpg

如果我想将数据 2 添加到第二个轴上,我会丢失列并且顺序也很奇怪。


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

ax2 = ax1.twinx()

ax2.bar(label2, data2, yerr=err2, color='blue')

plt.show()

没有给我六列而是只有 4 列,现在缺少两个 data1 列?

http://img3.mukewang.com/61b1db06000136db06400542.jpg

显然我 100% 肯定这是我的错,但请有人让我摆脱这种痛苦......


HUX布斯
浏览 148回答 2
2回答

狐的传说

你也可以这样做: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 并且你得到重叠。使双轴之间的类别相同可以消除这种混淆。

慕雪6442864

问题是您的条形重叠,因此您看到的条形少了两个。解决方案是使用定义明确的 x 值来定位条形图,然后在双轴上绘制后,分配 x 刻度标签。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']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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python