Search code examples
pythoncsvmatplotlibwxpython

Python plot dates using matplotlib


I'm very beginner at Python and matplotlib but trying to learn! I would like to use matplotlib to plot some simple data from a CSV containing dates with a frequency. The X axis containing dates and Y containing the frequency. Example data from CSV:

2011/12/15,5
2011/12/11,4
2011/12/19,2

I checked the "matplotlib.sf.net/examples" out but appears all the test data is downloaded from a http get. I would really appreciate if someone could guide me with some example code of how to read in (presumably using CSV reader) and display data in chart.

Thank you!!


Solution

  • I've tried to keep my code as simple as possible and this is by no means elegant, but here you go:

    import csv
    import matplotlib.pyplot as plt
    
    ### Making test CSV file ###
    data = [['2011/12/15,5'],['2011/12/11,4'],['2011/12/19,2'],['2011/12/16,3'],['2011/12/20,8'],['2011/12/14,4'],['2011/12/10,10'],['2011/12/9,7']]
    with open('test.csv', 'wb') as f:
        writer = csv.writer(f)
        for i in data:
            writer.writerow(i)
    
    
    ### Extract data from CSV ###
    with open('test.csv', 'rb') as n:
        reader = csv.reader(n)
        dates = []
        freq = []
        for row in reader:
            values = row[0].split(',')
            dates.append(values[0])
            freq.append(values[1])          
    
    
    ### Do plot ###
    false_x = [x for x in range(len(dates))]
    plt.plot(false_x,freq, 'o-')
    plt.xticks(range(len(dates)), (dates), rotation=45)
    # plt.axis([xmin, xmax, ymin, ymax]) - sets axes limits on graph
    plt.axis([-1, 8, 0, 11])
    plt.show()
    

    This makes:

    enter image description here