Comment tracer un graphique à barres très simple (Python, Matplotlib) en utilisant input *.fichier txt?

<!-J'utilise Python 2.7 et matplotlib. J'ai un *.txt fichier de données :

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

première colonne de mon fichier (chiffres) doit être sur l'axe Y dans mon graphique à barres, et la deuxième colonne de mon fichier (dates) doit être sur l'axe OX dans mon histogramme. Je ne sais pas comment lire le fichier:

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

j'ai lu un docs matplotlib mais ça ne m'aide toujours pas. Je voudrais aussi ajouter des dates que j'ai lues à mon diagramme à barres, pour le faire paraître comme

this

quelqu'un Pourrait-il m'aider?

25
demandé sur David Robinson 2012-07-23 21:48:01

3 réponses

vous parlez d'histogrammes, mais cela n'a pas tout à fait de sens. Les histogrammes et les diagrammes à barres sont des choses différentes. Un histogramme serait un diagramme à barres représentant la somme des valeurs par année, par exemple. Ici, tu as l'air d'être juste après les bars.

Voici un exemple complet de vos données qui affiche une barre de pour chaque valeur à chaque 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()

Vous devez analyser la date strptime et définir l'axe des x pour utiliser les dates (comme décrit dans ce répondre à).

si vous n'êtes pas intéressé à ce que l'axe des x montre une échelle de temps linéaire, mais que vous voulez simplement des barres avec des étiquettes, vous pouvez le faire à la place:

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

EDIT: suivant les commentaires, pour toutes les tiques, et pour qu'elles soient centrées, passez la gamme à set_ticks (et de les déplacer de la moitié de la largeur de la barre):

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)
30
répondu Bruno 2017-05-23 12:03:09

ce code fera ce que vous cherchez. Il est basé sur des exemples trouvés ici et ici.

autofmt_xdate() l'appel est particulièrement utile pour rendre les étiquettes x-axis lisibles.

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

23
répondu David Robinson 2016-03-07 21:13:44

tout d'Abord, ce que vous cherchez est un colonne ou diagramme à barres, pas vraiment un histogramme. Un histogramme est fait à partir d'une distribution de fréquence d'une variable continue qui est séparée en bacs. Ici vous avez une colonne contre des étiquettes séparées.

Pour faire un diagramme à barres avec matplotlib, utilisez le matplotlib.pyplot.bar() méthode. Jetez un oeil à cette page de la documentation matplotlib qui explique très bien avec des exemples et code source comment le faire.

si c'est possible cependant, je suggérerais que pour une tâche simple comme celle-ci si vous pouviez éviter d'écrire du code qui serait mieux. Si vous avez n'importe quel tableur cela devrait être un morceau de gâteau parce que c'est exactement ce qu'ils sont, et vous n'aurez pas à "réinventer la roue". Voici l'intrigue de vos données dans Excel:

Bar diagram plot in Excel

je viens de copier vos données à partir de la question, utilisé l'Assistant d'importation de texte pour le mettre dans deux colonnes, puis j'ai inséré un diagramme de colonne.

4
répondu Abhranil Das 2012-07-23 18:31:04