如何使用Matplotlib在数据框中绘制时间序列数据

时间:2020-05-07 10:39:07

标签: python pandas matplotlib plot

我已经将一些股价数据加载到数据框中。我想快速在Y轴上绘制收盘价,在X轴上绘制日期。

这是我的数据框的样子:

    Open    High    Low Close   Adjusted_close  Volume
Date                        
1980-12-11  22.000  22.000  22.000  22.000  0.0308  0
1980-12-12  28.750  28.876  28.750  28.750  0.0395  2093900
1980-12-15  27.250  27.376  27.250  27.250  0.0375  785200
1980-12-16  25.250  25.376  25.250  25.250  0.0350  472000
1980-12-17  25.876  26.000  25.876  25.876  0.0359  385900

当我键入df.plot()时,它会绘制看起来像直方图的东西。

当我键入df.plot('Close')时,它会绘制一堆弯曲的线。

我有两个问题:

  1. 如何快速绘制收盘价与日期的对比
  2. 假设我还有另外两个列(“ Buy”和“ Sell”)是布尔标志,在数据框中,如何使用绿色向上箭头和红色向下箭头绘制“ Buy”和“ Sell”点相同图上的箭头?

2 个答案:

答案 0 :(得分:1)

我只是尝试了相同的数据。我必须在同一图中绘制02个图,并根据所示的新列添加颜色。


import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

# data wrangling
columns = ['date', 'open', 'high', 'low', 'close', 'adjusted_close', 'volume']
df = pd.read_csv('timeseries.csv', parse_dates=True, names=columns)
#df['date'] = pd.to_datetime(df['date'])
signals = [True, True, False, False, True]
df['signals'] = signals

# plots
plt.plot(df['date'], df['close'])
kcolors = ['green' if s else 'red' for s in df['signals']]
plt.scatter(df['date'], df['close'], c=kcolors)
#rotate label if too long
plt.xticks(rotation=60)
plt.show()

enter image description here

答案 1 :(得分:0)

您描述的内容对我来说很完美。

import pandas as pd
df = pd.read_clipboard()
df['Close'].plot()

enter image description here 您确定将索引转换为pandas datetime吗?如果不尝试

df.index = pd.to_datetime(df.index)