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

2024-09-30 01:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为此争论了太久,以至于我很确定我不理解matplotlib中twinx的实现

好的,我有一些密码

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()

这给了我一张漂亮的图表 enter image description here

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

ax1.bar(label1, data1, yerr=err1, color='red')
ax2 = ax1.twinx()
ax2.bar(label2, data2, yerr=err2, color='blue')
plt.show()

没有给我6列,但只有4列,其中两列data1现在丢失了?你知道吗

enter image description here

显然我百分之百肯定这是我的错,但请有人把我从这个痛苦。。。你知道吗


Tags: 数据matplotlibbarpltredcolorlabel2label1
2条回答

问题是,你的酒吧重叠,因此你看到两个酒吧少。解决方案是使用定义良好的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()

enter image description here

您还可以执行以下操作:

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可以得到重叠。使你的分类在双轴之间相同可以消除这种混淆。你知道吗

相关问题 更多 >

    热门问题