25

Python2.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にあり、ファイルの2番目の列(日付)はヒストグラムの軸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のドキュメントを読みましたが、それでも役に立ちません。また、読んだ日付を棒グラフに追加して、次のようにします。

これ

誰か助けてくれませんか?

4

3 に答える 3

30

あなたはヒストグラムについて話しているが、これはまったく意味がない。ヒストグラムと棒グラフは別のものです。ヒストグラムは、たとえば、1年あたりの値の合計を表す棒グラフになります。ここでは、あなたはただバーを追いかけているようです。

これは、各日付で必要な各値のバーを示すデータの完全な例です。

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)
于 2012-07-23T18:34:13.187 に答える
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")

ここに画像の説明を入力してください

于 2012-07-23T18:28:02.673 に答える
3

まず、探しているのは棒グラフであり、実際にはヒストグラムではありません。ヒストグラムは、ビンに分割された連続変数の度数分布から作成されます。ここに、個別のラベルに対する列があります。

matplotlibで棒グラフを作成するには、このmatplotlib.pyplot.bar()メソッドを使用します。例とソースコードでそれを行う方法を非常によく説明しているmatplotlibドキュメントのこのページを見てください。

ただし、可能であれば、このような単純なタスクでは、より良いコードを記述しないようにすることをお勧めします。スプレッドシートプログラムをお持ちの場合、これはまさにその目的であり、「車輪の再発明」を行う必要がないため、簡単なことです。以下は、Excelでのデータのプロットです。

Excelの棒グラフプロット

質問からデータをコピーし、テキストインポートウィザードを使用して2列に配置してから、列図を挿入しました。

于 2012-07-23T18:11:56.563 に答える