CSV文件中的新手Matplotlib和Pandas绘图

时间:2018-12-16 21:20:51

标签: python python-3.x pandas csv matplotlib

我完全没有经过Matplotlib的培训,这看起来确实像是一个基本的绘图应用程序,但是除了错误我什么都没有得到。

使用Python 3,我只是试图以日期为x轴,价格为y来绘制CSV文件中的历史股价数据。数据CSV如下所示:

data

(只是现在才注意到时间差距很大,但是随便吧)

import glob
import pandas as pd
import matplotlib.pyplot as plt

def plot_test():
    files = glob.glob('./data/test/*.csv')

    for file in files:
        df = pd.read_csv(file, header=1, delimiter=',', index_col=1)
        df['close'].plot()
        plt.show()

plot_test()

我现在正在使用glob只是为了标识该文件夹中的任何CSV文件,但是我还尝试仅指定一个特定的CSV文件名并得到相同的错误:

KeyError: 'close'

我还尝试仅指定一个特定的列号来仅绘制一个特定的列,但我不知道发生了什么。

理想情况下,我想像真实的股票数据一样绘制它,所有内容都在同一张图上,其自身轴线底部的体积,在y轴上打开高低位,在x轴上显示日期,文件中的每一行。我尝试了几种不同的解决方案,但似乎无法弄清楚。我知道这可能是以前问过的,但是我尝试了SO和其他公司提供的许多不同解决方案,但是我的想法似乎挂在了我身上。非常感谢新手的帮助!

2 个答案:

答案 0 :(得分:1)

pandas documentation上,您的csv的header kwarg应该为0,因为第一行包含列名。发生的情况是,您正在构建的DataFrame没有列close,因为它从“第二”行获取标头。如果您使用header kwarg或将其更改为header=0,则可能会正常工作。与其他kwarg相同,无需定义它们。简单的df = pd.read_csv(file)就可以了。

答案 1 :(得分:1)

您可以根据自己的需要美化它

import pandas
import matplotlib.pyplot as plt

def plot_test(file):



    df = pandas.read_csv(file)

    # convert timestamp
    df['timestamp'] = pandas.to_datetime(df['timestamp'], format = '%Y-%m-%d %H:%M')



    # plot prices
    ax1 = plt.subplot(211)
    ax1.plot_date(df['timestamp'], df['open'], '-', label = 'open')
    ax1.plot_date(df['timestamp'], df['close'], '-', label = 'close')
    ax1.plot_date(df['timestamp'], df['high'], '-', label = 'high')
    ax1.plot_date(df['timestamp'], df['low'], '-', label = 'low')
    ax1.legend()

    # plot volume
    ax2 = plt.subplot(212)

    # issue: https://github.com/matplotlib/matplotlib/issues/9610
    df.set_index('timestamp', inplace = True)
    df.index.to_pydatetime()

    ax2.bar(df.index, df['volume'], width = 1e-3)
    ax2.xaxis_date()

    plt.show()

enter image description here