How to plot a very simple bar chart (Python, Matplotlib) using input *.txt file?

前端 未结 3 1554
孤街浪徒
孤街浪徒 2020-12-08 15:04

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
8         


        
相关标签:
3条回答
  • 2020-12-08 15:27

    First, what you are looking for is a column or bar diagram, not really a histogram. A histogram is made from a frequency distribution of a continuous variable that is separated into bins. Here you have a column against separate labels.

    To make a bar diagram with matplotlib, use the matplotlib.pyplot.bar() method. Have a look at this page of the matplotlib documentation that explains very well with examples and source code how to do it.

    If it is possible though, I would just suggest that for a simple task like this if you could avoid writing code that would be better. If you have any spreadsheet program this should be a piece of cake because that's exactly what they are for, and you won't have to 'reinvent the wheel'. The following is the plot of your data in Excel:

    Bar diagram plot in Excel

    I just copied your data from the question, used the text import wizard to put it in two columns, then I inserted a column diagram.

    0 讨论(0)
  • 2020-12-08 15:31

    This code will do what you're looking for. It's based on examples found here and here.

    The 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")
    

    enter image description here

    0 讨论(0)
  • 2020-12-08 15:38

    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)
    
    0 讨论(0)
提交回复
热议问题