假设我有像这样的pandas DataFrame
df = pd.DataFrame(
{'data':[1, 2, 3, 4, 5], 'group': [-1, 0, 1, 0, -1]},
index=pd.date_range('2014-01-01', periods=5)
)
我想绘制df.data
的时间序列,其中标记根据df.group
而变化。有没有一种直接的方法来使用df.plot()
执行此操作?如果没有,这是一个简单的方法吗?
答案 0 :(得分:1)
我的第一个想法是使用seaborn,这是非常好的:
import numpy as np
import pandas
import seaborn
import matplotlib.pyplot as plt
%matplotlib inline
df = pandas.DataFrame({
'data': [1, 2, 3, 4, 5],
'group': [-1, 0, 1, 0, -1]
}, index=pandas.date_range('2014-01-01', periods=5))
df
fgrid = seaborn.FacetGrid(df.reset_index(), hue='group')
fgrid.map(plt.plot, 'index', 'data', linestyle='none', marker='o')
问题在于,我不能通过你的x轴值是日期来实现这一点。
答案 1 :(得分:1)
如果按照Paul H建议的那样修复日期并使用seaborn,那么这里有一种相当粗暴的方法,可以利用groupby和pyplot的颜色循环(尽管你很容易定义你自己的颜色/标记周期。)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(
{'data':[1, 2, 3, 4, 5],
'group': [-1, 0, 1, 0, -1]},
index=pd.date_range('2014-01-01', periods=5))
fig, ax = plt.subplots()
nc = len(plt.rcParams['axes.color_cycle'])
for i, g in enumerate(df.groupby('group')):
ax.scatter(g[1].index, g[1]['data'],
color=plt.rcParams['axes.color_cycle'][i % nc])
fig.autofmt_xdate()
plt.show()
结果情节: