Python 如何在matplotlib.pyplot中的第一个绘图之后添加第二个绘图?它';它不是在上面就是看不见

Python 如何在matplotlib.pyplot中的第一个绘图之后添加第二个绘图?它';它不是在上面就是看不见,python,matplotlib,Python,Matplotlib,我想制作一个条形图,显示当前测量值与一个月移动平均值的比较,方法是将当前数据的蓝色条(“a”)放在一个月平均值的稍宽灰色条(“b”)上 以下是我的代码的最简单版本: import matplotlib.pyplot as plt import pandas as pd import numpy as np data = pd.DataFrame({'a': [4, 5, 6], 'b': [3,4,5]}) x=np.arange(len(data['a

我想制作一个条形图,显示当前测量值与一个月移动平均值的比较,方法是将当前数据的蓝色条(“a”)放在一个月平均值的稍宽灰色条(“b”)上

以下是我的代码的最简单版本:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = pd.DataFrame({'a': [4, 5, 6],
                    'b': [3,4,5]})
x=np.arange(len(data['a']))

fig, ax = plt.subplots()
ax.bar(x,data['a'])
rt_ax = ax.twinx()
rt_ax.bar(x,data['b'],width=0.9,color='grey')
rt_ax.set_ylim(ax.get_ylim())
# ax.set_zorder(rt_ax.get_zorder()+1)

plt.show()
这将创建我想要的条,但灰色条位于顶部:

如果我取消对ax.set_zorder行的注释,我会看到蓝色条,但灰色条会消失:

加阿尔法


最好的办法是省去twinx,在同一个ax上绘制所有内容。条形图将按绘制顺序显示,因此首先绘制灰色条形图。如果您确实需要
twinx
,您可以通过
ax.set\u facecolor('none')
将绘图背景从白色更改为透明。谢谢,
ax.set\u facecolor('none')
成功了!(我需要使用次轴,因为在我的应用程序中,我在左y轴上有计数,在右y轴上有比例,然后比较数据相对于比例轴绘制。)我可以在不使用
twinx
的情况下获得次y轴吗?我需要制作如下图形:
twinx
确实是正确的选择,当y轴不同时。请注意,使用twinx时,一个ax上的所有内容都会在另一个ax上的所有内容之前完全绘制。每一个ax都是一个完整的层。在该层中,所有内容都再次以子层的形式绘制,例如首先绘制条形图,然后绘制线条,然后在顶部绘制文本zorder可以更改轴之间的顺序
zorder
对于单个组件,可以更改ax组件的绘制顺序。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = pd.DataFrame({'a': [4, 5, 6],
                    'b': [3,4,5]})
x=np.arange(len(data['a']))

fig, ax = plt.subplots()

ax.bar(x,data['a'])
rt_ax = ax.twinx()
rt_ax.bar(x,data['b'],width=0.9,color='grey', alpha=0.6)
rt_ax.set_ylim(ax.get_ylim())

plt.show()