【发布时间】:2018-01-13 08:30:58
【问题描述】:
我正在尝试绘制一条应该以代表图形趋势的方式着色的线。例如,如果增加,则应为绿色,而如果减少,则应为红色。
我可以简单地使用移动的数据框来表示这个趋势绘图点:
dates = ['2018-01-{}'.format(d) for d in range(1, 32)]
vals = [1, 2, 3, 4, 6, 9, 12, 11, 10, 8, 4, 10, 15, 17, 17, 18, 18, 17, 16, 19, 22, 23, 23, 25, 28, 33, 30, 25, 24,
20, 18]
df = pd.DataFrame(data=vals, columns=['Value'])
df.set_index(pd.to_datetime(dates), inplace=True)
df_shifted = df.shift()
df_shifted.iloc[0] = df_shifted.iloc[1]
mask_inc = df >= df_shifted
df['Increase'] = mask_inc['Value']
fig, ax = plt.subplots()
ax.plot(df['Value'], color='#ededed')
color = {True: 'green', False: 'red'}
for index, row in df.iterrows():
ax.plot(index, row['Value'], 'o', color=color[row['Increase']])
我知道 matplotlib 不允许在同一个线图中使用不同的颜色,但是有什么解决方法可以不让它变得非常复杂吗?
我曾考虑使用“增加”掩码绘制两个不同的数据框,但问题是该线将连续绘制,因此所有点都将连接,而我需要将其拆分为由段组成的不同部分。
【问题讨论】:
标签: python matplotlib