pandas - 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 轴为绿色时间序列取适当的值:
解决方案
可能类似于以下 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')
推荐阅读
- mysql - mysql - 每月和每年的总和
- javascript - 需要碰撞脚本方面的帮助
- sql - 如何在 SQL Server 中比较具有相同 ID 的不同行中的相同列值
- javascript - 如何更改 Ant 表头复选框
- c++ - 带有 boost asio ssl 的未定义引用
- java - 对 arraylist 执行操作时发生 java.util.NoSuchElementException
- r - 如何从列表中取出特定元素并返回向量
- reactjs - 滚动 DayPicker 到选定的天数月
- java - 我正在为 Android 开发一个电子邮件客户端应用程序。我在阅读 MultiPart 消息正文时遇到问题
- laravel - 如何在 laravel 验证中使用逻辑运算符?