I use Python 2.7 and matplotlib. I have a *.txt data file :
0 14-11-2003 1 15-03-1999 12 04-12-2012 33 09-05-2007 44 16-08-1998 55 25-07-2001 76 31-12-2011 87 25-06-1993 118 16-02-1995 119 10-02-1981 145 03-05-2014
first column of my file (numbers) should be on axis Y in my bar chart, and the second column from my file (dates) should be on axis OX in my histogram. I only know how to read the file:
OX =  OY =  try : with open('data.txt', 'r') as openedFile : for line in openedFile : tab = line.split() OY.append(int(tab)) OX.append(str(tab)) except IOError : print("IOError!")
I did read a matplotlib docs but it still doesn't help me. I would also like to add dates I read to my bar chart, to make it look like
Could someone please help me?
You're talking about histograms, but this doesn't quite make sense. Histograms and bar charts are different things. An histogram would be a bar chart representing the sum of values per year, for example. Here, you just seem to be after bars.
Here is a complete example from your data that shows a bar of for each required value at each date:
import pylab as pl import datetime data = """0 14-11-2003 1 15-03-1999 12 04-12-2012 33 09-05-2007 44 16-08-1998 55 25-07-2001 76 31-12-2011 87 25-06-1993 118 16-02-1995 119 10-02-1981 145 03-05-2014""" values =  dates =  for line in data.split("\n"): x, y = line.split() values.append(int(x)) dates.append(datetime.datetime.strptime(y, "%d-%m-%Y").date()) fig = pl.figure() ax = pl.subplot(111) ax.bar(dates, values, width=100) ax.xaxis_date()
You need to parse the date with
strptime and set the x-axis to use dates (as described in this answer).
If you're not interested in having the x-axis show a linear time scale, but just want bars with labels, you can do this instead:
fig = pl.figure() ax = pl.subplot(111) ax.bar(range(len(dates)), values)
EDIT: Following comments, for all the ticks, and for them to be centred, pass the range to
set_ticks (and move them by half the bar width):
fig = pl.figure() ax = pl.subplot(111) width=0.8 ax.bar(range(len(dates)), values, width=width) ax.set_xticks(np.arange(len(dates)) + width/2) ax.set_xticklabels(dates, rotation=90)
autofmt_xdate() call is particularly useful for making the x-axis labels readable.
import numpy as np from matplotlib import pyplot as plt fig = plt.figure() width = .35 ind = np.arange(len(OY)) plt.bar(ind, OY, width=width) plt.xticks(ind + width / 2, OX) fig.autofmt_xdate() plt.savefig("figure.pdf")