首页 > 解决方案 > Pandas:如何使用单独的 y 轴进行绘图,但仍控制顺序?

问题描述

我正在尝试在一个图中绘制多个时间序列。尺度不同,因此它们需要单独的 y 轴,我希望特定时间序列的 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

标签: pandasmatplotlibplottime-seriesaxis

解决方案


可能类似于以下 usingmatplotlib.axes.Axes.twinx而不是 using 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')

在此处输入图像描述


推荐阅读