gpt4 book ai didi

python - 基于其中一列的 pandas DataFrame 子图的 Matplotlib axvspan 着色

转载 作者:行者123 更新时间:2023-11-28 20:46:39 30 4
gpt4 key购买 nike

遮蔽 pandas 最优雅的方式是什么?基于 DataFrame 中的列之一的子图?

一个简单的例子:

In [8]:
from random import *
import pandas as pd

randBinList = lambda n: [randint(0,1) for b in range(1,n+1)]
rng = pd.date_range('1/1/2011', periods=72, freq='H')
ts = pd.DataFrame({'Value1': randn(len(rng)),'Value2': randn(len(rng)),'OnOff': randBinList(len(rng))}, index=rng)
ts.plot(subplots=True)

结果如下图:

pandas subplots for axvspan

理想情况下,我想要一个只有 Value1Value2 的子图,两个图都使用 axvspan 着色。其中 On(OnOff 中带有 1.0 的值)有阴影,Off 没有阴影。

最佳答案

您已经做好了做好这件事的准备。不过,我认为您需要直接与 matplotlib 交互。

如果您像这样设置您的 DataFrame(您已有的):

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

randBinList = lambda n: [np.random.randint(0,2) for b in range(1,n+1)]
rng = pd.date_range('1/1/2011', periods=72, freq='H')
ts = pd.DataFrame({
'Value1': np.random.randn(len(rng)),
'Value2': np.random.randn(len(rng)),
'OnOff': randBinList(len(rng))
}, index=rng)

然后你可以使用 fill_between 命令和 where kwarg:

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.plot(ts.index, ts['Value1'], 'k-')
ax1.fill_between(ts.index, ts['Value1'], y2=-6, where=ts['OnOff'])

ax2.plot(ts.index, ts['Value2'], 'k-')
ax2.fill_between(ts.index, ts['Value2'], y2=-6, where=ts['OnOff'])
fig.tight_layout()

这给了我: toggle plot

关于python - 基于其中一列的 pandas DataFrame 子图的 Matplotlib axvspan 着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20477046/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com