簡體   English   中英

如何使用輸入 *.txt 文件繪制一個非常簡單的條形圖(Python、Matplotlib)?

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

我使用 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

我的文件(數字)的第一列應該在我的條形圖中的 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!")

我確實閱讀了 matplotlib 文檔,但它仍然沒有幫助我。 我還想將我閱讀的日期添加到條形圖中,使其看起來像

這個

有人可以幫我嗎?

你說的是直方圖,但這不太合理。 直方圖和條形圖是不同的東西。 例如,直方圖可以是表示每年值總和的條形圖。 在這里,您似乎只是在追求酒吧。

以下是來自您的數據的完整示例,其中顯示了每個日期的每個必需值的條形:

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()

您需要使用strptime解析日期並將 x 軸設置為使用日期(如本答案中所述)。

如果您對讓 x 軸顯示線性時間刻度不感興趣,而只想顯示帶有標簽的條形,您可以這樣做:

fig = pl.figure()
ax = pl.subplot(111)
ax.bar(range(len(dates)), values)

編輯:以下評論,對於所有的刻度線,並且為了讓它們居中,將范圍傳遞給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)

這段代碼會做你正在尋找的。 它基於在此處此處找到的示例。

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

在此處輸入圖片說明

首先,您要查找的是柱形圖條形圖,而不是真正的直方圖。 直方圖由連續變量的頻率分布構成,該變量被分成多個區間。 在這里,您有一個針對單獨標簽的列。

要使用 matplotlib 制作條形圖,請使用matplotlib.pyplot.bar()方法。 看看 matplotlib 文檔的這個頁面,它很好地解釋了示例和源代碼如何做到這一點。

如果可能的話,我只是建議對於像這樣的簡單任務,如果您可以避免編寫更好的代碼。 如果您有任何電子表格程序,這應該是小菜一碟,因為這正是它們的用途,您不必“重新發明輪子”。 以下是您在 Excel 中的數據圖:

Excel 中的條形圖

我只是從問題中復制了您的數據,使用文本導入向導將其分成兩列,然后插入了一個列圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM