如何使用 zorder 更改这些图的顺序?

How to change the order of these plots using zorder?

我正在尝试让线图位于条形图之上。但无论我做什么来改变 zorder,它似乎都保持在行的顶部。我尝试更改 zorder 所做的任何事情似乎都没有用。有时,如果 zorder <= 0,则条形图不会显示。

import pandas as pd
import matplotlib.pyplot as plt

def tail_plot(tail):

    plt.figure()

    #line plot
    ax1 = incidence[incidence['actual_inc'] != 0].tail(tail).plot(x='date', y=['R_t', 'upper 95% CI', 'lower 95% CI'], color = ['b', '#808080', '#808080'])
    ax1.set_zorder(2)

    ax2 = ax1.twinx()

    inc = incidence[incidence['actual_inc'] != 0]['actual_inc'].tail(tail).values

    dates = incidence[incidence['actual_inc'] != 0]['date'].tail(tail).values

    #bar plot
    ax2.bar(dates, inc, color ='red', zorder=1)  
    ax2.set_zorder(1)

一直给我这个:

post 中方法的问题是 ax1 有一个白色背景,完全遮挡了 ax2 的情节。为了解决这个问题,背景色可以设置为'none'.

请注意,post 示例代码中的 plt.figure() 创建了一个空图,因为 pandas 图创建了自己的新图形(因为没有 ax明确给出)。

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

df = pd.DataFrame({f'curve {i}': 20 + np.random.normal(.1, .5, 30).cumsum() for i in range(1, 6)})

# line plot
ax1 = df.plot()
ax1.set_zorder(2)
ax1.set_facecolor('none')
ax2 = ax1.twinx()

# bar plot
x = np.arange(30)
ax2.bar(x, np.random.randint(7 + x, 2 * x + 10), color='red', zorder=1)
ax2.set_zorder(1)
plt.show()