【发布时间】:2020-02-26 11:38:58
【问题描述】:
这是我的数据集:
Date Price Peak Trough
01-Jan-2002 33.78 False False
02-Jan-2002 34.19 False False
03-Jan-2002 35.44 False False
04-Jan-2002 36.75 True False
05-Jan-2002 32.28 False True
我想将 价格 绘制为以日期为 X 轴的折线图。每当峰值 True 时,线上应该有一个绿点,而每当 Trough 是 True 时,线上应该有一个红点。
应该是这样的:
最好的解决方案是,如果我可以对其进行编码,那么只要条件为真,它就可以说明问题。但我不知道我是如何尝试制作两个新的数据框的。在 df1 中是峰值为真的所有数据点,在 df2 中是所有低谷为真的点。然后我尝试在一个图中绘制 3 个数据框,如下所示:
df.plot(x = 'Date', y = 'Price', figsize=(16,10))
plt.scatter(x = dfP['Date'], y = dfP['Price'], c = 'green')
plt.scatter(x = dfT['Date'], y = dfT['Price'], c = 'red')
plt.yscale('log')
但是,它不能正确缩放点:
如何正确缩放日期的点数?或者有没有一种更简单的方法,只要条件为真,我就可以设置点?提前致谢。
编辑:解决方案是不要将 pandas 与 matplotlib 混合。代码现在看起来像这样:
plt.figure(figsize=(16,10))
plt.plot(df['Date'], df['Dow Chemical Company (The)'])
plt.scatter(x = dfP['Date'], y = dfP['Dow Chemical Company (The)'], c = 'green')
plt.scatter(x = dfT['Date'], y = dfT['Dow Chemical Company (The)'], c = 'red')
plt.yscale('log')
现在所有点都正确显示在线上,但它在 x 轴上显示了我需要修复的每个日期。
【问题讨论】:
-
绘制日期时间时不要混合使用 pandas 和 matplotlib。要么始终使用
df.plot,要么使用plt.plot/scatter,但不能同时使用两者,因为它们对日期时间有不同的单位转换。 -
非常感谢。我将其更改为 matplotlib,现在这些点已正确显示在线上。唯一已知的问题是它会在 x 轴上显示每个日期:i.imgur.com/xgVe3Ce.png 你知道如何解决这个问题吗?
-
如果您使用字符串而不是日期时间对象,就会发生这种情况。
-
非常感谢。我知道这些问题可能很简单,但作为初学者,我非常欣赏它。
标签: python-3.x matplotlib plot