如何使用输入*.txt文件绘制一个非常简单的条形图(Python,Matplotlib)?

maz*_*zix 25 python matplotlib bar-chart

我使用Python 2.7和matplotlib.我有一个*.txt数据文件:

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
Run Code Online (Sandbox Code Playgroud)

我的文件的第一列(数字)应该在我的条形图中的Y轴上,而我文件中的第二列(日期)应该在我的直方图中的轴OX上.我只知道如何阅读文件:

OX = []
OY = []

try :
    with open('data.txt', 'r') as openedFile :
        for line in openedFile :
            tab = line.split()
            OY.append(int(tab[0]))
            OX.append(str(tab[1]))
except IOError :
    print("IOError!")
Run Code Online (Sandbox Code Playgroud)

我确实读过matplotlib文档,但它仍然没有帮助我.我还想将我读到的日期添加到条形图中,使其看起来像

这个

有人可以帮帮我吗?

Bru*_*uno 30

你在谈论直方图,但这没有多大意义.直方图和条形图是不同的东西.例如,直方图是表示每年值的总和的条形图.在这里,你似乎只是在酒吧之后.

以下是您的数据中的完整示例,其中显示了每个日期的每个所需值的条形图:

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()
Run Code Online (Sandbox Code Playgroud)

您需要解析日期strptime并设置x轴以使用日期(如本答案中所述).

如果您对x轴显示线性时标不感兴趣,但只想要带标签的条形图,则可以这样做:

fig = pl.figure()
ax = pl.subplot(111)
ax.bar(range(len(dates)), values)
Run Code Online (Sandbox Code Playgroud)

编辑:在评论之后,对于所有刻度,以及它们居中,将范围传递给set_ticks(并将它们移动一半宽度):

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)
Run Code Online (Sandbox Code Playgroud)


Dav*_*son 24

此代码将执行您正在寻找的内容.它基于此处此处的示例.

autofmt_xdate()调用对于使x轴标签可读特别有用.

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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • `ind = np.arange(len(OY))NameError:名称'OY'未定义 (4认同)