Pandas: Как я могу построить с отдельной осью Y, но по-прежнему контролировать порядок? - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь построить несколько временных рядов на одном графике. Шкалы разные, поэтому им нужна отдельная ось Y, и я хочу, чтобы определенный временной ряд c имел свою ось Y справа. Я также хочу, чтобы этот временной ряд был позади других. Но я обнаружил, что когда я использую secondary_y=True, этот временной ряд всегда выводится на передний план, даже если код для его построения предшествует другим. Как я могу контролировать порядок графиков при использовании secondary_y=True (или есть альтернатива)?

Более того, когда я использую secondary_y=True, ось Y слева больше не адаптируется к соответствующим значениям. Есть ли фиксированное значение для этого?

# imports
import numpy as np
import matplotlib.pyplot as plt

# dummy data 
lenx = 1000
x = range(lenx)
np.random.seed(4)
y1 = np.random.randn(lenx)
y1 = pd.Series(y1, index=x)
y2 = 50.0 + y1.cumsum()

# plot time series.
# use ax to make Pandas plot them in the same plot.
ax = y2.plot.area(secondary_y=True)
y1.plot(ax=ax)

Так что я хотел бы, чтобы график синей области за зеленым временным рядом, и чтобы левая ось Y принимала соответствующие значения для зеленого временного ряда :

https://i.stack.imgur.com/6QzPV.png

1 Ответ

0 голосов
/ 27 марта 2020

Возможно, что-то вроде следующего, используя matplotlib.axes.Axes.twinx вместо использования secondary_y, а затем следуя подходу в этот ответ , чтобы переместить сдвоенную ось на фон:

# plot time series.
fig, ax = plt.subplots()

y1.plot(ax=ax, color='green')
ax.set_zorder(10)
ax.patch.set_visible(False)

ax1 = ax.twinx()
y2.plot.area(ax=ax1, color='blue')

enter image description here

...