27 votes

Comment tracer des données à partir de plusieurs fichiers texte à deux colonnes avec des légendes dans Matplotlib ?

Comment ouvrir plusieurs fichiers texte provenant de différents répertoires et les représenter sur un seul graphique avec des légendes ?

30voto

cge Points 1830

Ceci est relativement simple si vous utilisez pylab (inclus avec matplotlib) au lieu de matplotlib directement. Commencez par une liste de noms de fichiers et de légendes, comme [ ('nom du fichier 1', 'label 1'), ('nom du fichier 2', 'label 2'), ...]. Ensuite, vous pouvez utiliser quelque chose comme ce qui suit :

import pylab

datalist = [ ( pylab.loadtxt(filename), label ) for filename, label in list_of_files ]

for data, label in datalist:
    pylab.plot( data[:,0], data[:,1], label=label )

pylab.legend()
pylab.title("Title of Plot")
pylab.xlabel("X Axis Label")
pylab.ylabel("Y Axis Label")

Vous pouvez également ajouter quelque chose comme fmt='o' à la commande plot, afin de passer d'une ligne à des points. Par défaut, matplotlib with pylab trace sur la même figure sans l'effacer, vous pouvez donc simplement exécuter la commande plot plusieurs fois.

20voto

tbc Points 445

Supposons que votre fichier ressemble à ceci et qu'il s'appelle test.txt (délimité par des espaces) :

1 2
3 4
5 6
7 8

Ensuite :

#!/usr/bin/python

import numpy as np
import matplotlib.pyplot as plt

with open("test.txt") as f:
    data = f.read()

data = data.split('\n')

x = [row.split(' ')[0] for row in data]
y = [row.split(' ')[1] for row in data]

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax1.set_title("Plot title...")    
ax1.set_xlabel('your x label..')
ax1.set_ylabel('your y label...')

ax1.plot(x,y, c='r', label='the data')

leg = ax1.legend()

plt.show()

Example plot:

Je trouve que le fait de parcourir les galerie de graphiques sur matplotlib utile pour comprendre les légendes et les étiquettes des axes.

5voto

router Points 380

Je pense que la méthode la plus simple serait la suivante

 from matplotlib import pyplot;
 from pylab import genfromtxt;  
 mat0 = genfromtxt("data0.txt");
 mat1 = genfromtxt("data1.txt");
 pyplot.plot(mat0[:,0], mat0[:,1], label = "data0");
 pyplot.plot(mat1[:,0], mat1[:,1], label = "data1");
 pyplot.legend();
 pyplot.show();
  1. label est la chaîne de caractères affichée dans la légende
  2. vous pouvez tracer autant de séries de points de données que possible avant show() pour les tracer toutes sur le même graphique C'est la façon la plus simple de tracer des graphiques simples. Pour d'autres options de genfromtxt, voir ceci url .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X