Create a bar graph using datetimes
Question: I am using matplotlib and pyplot to create some graphs from a CSV file. I can
create line graphs no problem, but I am having a lot of trouble creating a bar
graph.

I referred to this post [matplotlib bar chart with
dates](http://stackoverflow.com/questions/5902371/matplotlib-bar-chart-with-
dates) among several others that seemed like they should easily accomplish my
task, but I can't get it to work with my list of datetimes.

Running the exact code from the above post generates the expected graph, but
when I swap our their x and y values for my own from my CSV file:

    
    
    import matplotlib.pyplot as plt
    import matplotlib
    import numpy as np
    from datetime import datetime
    import csv
    
    
    columns="YEAR,MONTH,DAY,HOUR,PREC,PET,Q,UZTWC,UZFWC,LZTWC,LZFPC,LZFSC,ADIMC,AET"
    
    data_file="FFANA_000.csv"
    
    list_of_datetimes = []
    skipped_header = False
    with open(data_file, 'rt') as f:
        reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
        for row in reader:
            if skipped_header:
                date_string = "%s/%s/%s %s" % (row[0].strip(), row[1].strip(), row[2].strip(), row[3].strip())
                dt = datetime.strptime(date_string, "%Y/%m/%d %H")
                list_of_datetimes.append(dt)
            skipped_header = True        
    
    
    UZTWC = np.genfromtxt(data_file, delimiter=',', names=columns, usecols=("UZTWC"))
    
    x = list_of_datetimes
    y = UZTWC 
    
    ax = plt.subplot(111)
    ax.bar(x, y, width=10)
    ax.xaxis_date()
    
    plt.show()
    

Running this gives the error:

    
    
    Traceback (most recent call last):
    File "graph.py", line 151, in <module>
    ax.bar(x, y, width=10)
    File "C:\Users\rbanks\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\__init__.py", line 1812, in inner
    return func(ax, *args, **kwargs)
    File "C:\Users\rbanks\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_axes.py", line 2118, in bar
    if h < 0:
    TypeError: unorderable types: numpy.ndarray() < int()
    

When I run the datetime numpy conversion that is necessary for plotting my
line graphs:

    
    
    list_of_datetimes = matplotlib.dates.date2num(list_of_datetimes)
    

I get the same error.

Could anyone offer some insight?

excerpt from FFANA_000.csv:

    
    
    %YEAR,MO,DAY,HR,PREC(MM/DT),ET(MM/DT),Q(CMS), UZTWC(MM),UZFWC(MM),LZTWC(MM),LZFPC(MM),LZFSC(MM),ADIMC(MM), ET(MM/DT)
    2012,   5,   1,   0,     0.000,     1.250,     0.003,     2.928,     0.000,     3.335,     4.806,     0.000,     6.669,     1.042
    2012,   5,   1,   6,     0.000,     1.250,     0.003,     2.449,     0.000,     3.156,     4.798,     0.000,     6.312,     0.987
    2012,   5,   1,  12,     0.000,     1.250,     0.003,     2.048,     0.000,     2.970,     4.789,     0.000,     5.940,     0.929
    2012,   5,   1,  18,     0.000,     1.250,     0.003,     1.713,     0.000,     2.782,     4.781,     0.000,     5.564,     0.869
    2012,   5,   2,   0,     0.000,     1.250,     0.003,     1.433,     0.000,     2.596,     4.772,     0.000,     5.192,     0.809
    2012,   5,   2,   6,     0.000,     1.250,     0.003,     1.199,     0.000,     2.414,     4.764,     0.000,     4.829,     0.750
    2012,   5,   2,  12,     0.000,     1.250,     0.003,     1.003,     0.000,     2.239,     4.756,     0.000,     4.478,     0.693
    2012,   5,   2,  18,     0.000,     1.250,     0.003,     0.839,     0.000,     2.072,     4.747,     0.000,     4.144,     0.638
    2012,   5,   3,   0,     0.000,     1.250,     0.003,     0.702,     
    


Answer: I could not fully reproduce your problem with your data and code. I get

    
    
    > UZTWC = np.genfromtxt(data_file, delimiter=';', names=columns,
    > usecols=("UZTWC"))   File
    > "C:\Python34-64bit\lib\site-packages\numpy\lib\npyio.py", line 1870,
    > in genfromtxt
    >     output = np.array(data, dtype) ValueError: could not convert string to float: b'UZTWC(MM)'
    

But try changing `UZTWC = np.genfromtxt(...)` to

    
    
    UZTWC = np.genfromtxt(data_file, delimiter=',', usecols=(7), skip_header=1)
    

and you should get a graph. The problem is that for some reason your numpy
array is a made of strings and not floats.

