python:如何使用matplotlib表示x轴数据

时间:2018-02-16 18:27:20

标签: python python-3.x matplotlib

我目前正在使用matplotlib绘制股票价格列表,但是我不确定如何在图表中正确显示相应的日期。 csv中的数据是每日股票价格,但我只想在x轴上显示每2周的日期。股票日期和价格在2个不同的列表中,是否可以这样做?或者我应该使用字典而是尝试以这种方式绘制它?

import csv
import sys
import matplotlib.pyplot as plt


def main():
    filename = 'somefile.csv'
    with open(filename, newline='') as f:
        reader = csv.reader(f)
        next(reader, None)  # skips the column headers

        dates = list()
        prices = list()
        try:
            for row in reader:
                dates.append(row[0])
                prices.append(float(row[1]))  # converts prices to floats and saves in a new list.

            ma_window = 7

            reverse_prices = prices[::-1]

            average_reverse_prices = []

            r = len(prices) - ma_window + 1

            for i in range(r):
                interval = reverse_prices[i:(i + ma_window)]
                average = float(sum(interval)) / ma_window  # might want to round to 2 decimal places
                average_reverse_prices.append(average)

            average_prices = average_reverse_prices[::-1]
            print(average_prices)  

            plt.plot(average_prices)

            plt.xlabel('Date')
            plt.ylabel('Price')

            plt.show()

        except csv.Error as e:
            sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))


if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:1)

你应该从matplotlib网站check out this example。 您似乎应该能够执行以下操作:

plt.xticks(range(0,len(average_prices), 14), dates[0:len(average_prices):14])

答案 1 :(得分:0)

目前你还没有在图中使用你的x轴数据。您只提交" average_prices"到plt.plot,所以它只会使用x轴的索引值。如果您希望x轴显示日期信息,则应将日期数据格式化为datetime objects。这是一个example of how to format the x-axis刻度线,并在x轴上绘制日期。

另外,有关rounding to two decimal places

的评论