【问题标题】:How to plot timeseries data in a dataframe using matplotlib如何使用 matplotlib 在数据框中绘制时间序列数据
【发布时间】:2020-05-07 10:39:07
【问题描述】:

我已将一些股票价格数据加载到数据框中。我想在 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. 假设我有另外两列(“买入”和“卖出”)是布尔标志,在数据框中,我如何使用绿色向上箭头和红色向下箭头绘制“买入”和“卖出”点同一地块上的箭头 ?

【问题讨论】:

    标签: python pandas matplotlib plot


    【解决方案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()
    
    

    【讨论】:

    • 嗯,我刚刚仔细检查了您的代码。它并没有完全做我想做的事。这是问题所在,您的代码将每个数据点绘制为信号。在实践中,一些日期点不会有信号——这就是为什么我有两列“买入”和“卖出”。只有当列中的标志设置为真时,我才想绘制相关符号(例如,当“购买”列中的标志为真时,绿色向上箭头,或标志为真时的红色向下箭头在“卖出”列中)。
    • @HomunculusReticulli,我已将信号硬编码为TrueFalse。我同意在实践中,我们使用一种或另一种方法填充信号。拥有两列“买入”和“卖出”也是一个很好的方法。在这种情况下,我们将在一个图中有 03 个图(如果我错了,请纠正我)。我可以知道你用什么来显示箭头吗?
    【解决方案2】:

    你所描述的对我来说非常适合。

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

    您确定将索引转换为熊猫日期时间吗?如果不尝试

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

    【讨论】:

    • 啊,我明白我做错了什么。我在做df.plot('Close') 而不是df['Close'].plot()。我的问题的第二部分呢?在标志为 True 的价格/日期坐标处绘制符号(例如绿色/红色箭头)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2013-12-25
    • 2016-01-14
    • 2016-02-22
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多