鉴于我有两个时间序列(或数据框中的两列),如下所示:
rng1 = pd.date_range('1/1/2017', periods=3, freq='H')
ts1 = pd.Series(np.random.randn(len(rng)), index=rng)
ts2 = pd.Series(['HE','NOT','SHE'], index=rng)
我想做一个ts1.plot()
的情节,其中ts2
用于注释ts1时间序列,但是我只想注释<> NOT
的时间戳。
到目前为止,我发现使用标记将是我正在寻找的东西。例如,为'HE'设置一个标记,为'SHE'设置另一个标记,为'NOT'设置No标记。但是,我无法弄清楚如何使用另一个时间序列作为输入,只能注释时间戳&lt;&gt;一些价值。
答案 0 :(得分:0)
您可以使用pandas dataframe groupby
方法按您正在使用的标签拆分数据集,只需忽略您不想绘制的值。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
rng = pd.date_range('1/1/2017', periods=3, freq='H')
ts1 = pd.Series(np.random.randn(len(rng)), index=rng)
ts2 = pd.Series(['HE','NOT','SHE'], index=rng)
df = pd.concat([ts1, ts2], keys=['foo', 'bar'], axis=1)
ax = None # trick to keep everything plotted on a single axis
labels = [] # keep track of the labels you actually use
for key, dat in df.groupby('bar'):
if key == 'NOT':
continue
labels.append(key)
ax = dat.plot(ax=ax, marker='s', ls='none', legend=False)
# handle the legend through matplotlib directly, rather than pandas' interface
ax.legend(ax.get_lines(), labels)
plt.show()