Как изменить порядок этих участков с помощью zorder? - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь добиться того, чтобы линейный график был над линейным графиком. Но независимо от того, что я делаю, чтобы изменить zorder, кажется, что он удерживает планку на вершине линии. Ничто, что я делаю, чтобы попытаться изменить zorder, кажется, не работает. Иногда гистограмма просто не отображается, если zorder <= 0. </p>

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)

Продолжает давать мне это:

enter image description here

1 Ответ

2 голосов
/ 24 апреля 2020

Проблема с подходом в посте заключается в том, что ax1 имеет белый фон, который полностью перекрывает сюжет ax2. Чтобы решить эту проблему, цвет фона может быть установлен на «none».

Обратите внимание, что 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()

demo plot

...