web-dev-qa-db-fra.com

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

Comment puis-je ouvrir plusieurs fichiers texte de différents répertoires et les tracer sur un seul graphique avec des légendes?

26
Hiren

C'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 noms de légendes, comme [('nom du fichier 1', 'étiquette 1'), ('nom du fichier 2', 'étiquette 2'), ...]. Ensuite, vous pouvez utiliser quelque chose comme ceci:

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 vouloir ajouter quelque chose comme fmt = 'o' à la commande plot, afin de passer d'une ligne à des points. Par défaut, matplotlib avec des tracés pylab sur la même figure sans l'effacer, vous pouvez donc simplement exécuter la commande de tracé plusieurs fois.

30
cge

Supposons que votre fichier ressemble à ceci et 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 la navigation sur le site galerie de parcelles sur matplotlib est utile pour comprendre les légendes et les étiquettes des axes.

20
tbc

Je pense que la manière la plus simple serait

 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 affichée sur la légende
  2. vous pouvez tracer autant de séries de points de données que possible avant show () pour tous les tracer sur le même graphique. C'est la manière simple de tracer des graphiques simples. Pour d'autres options dans genfromtxt, allez à ceci rl .
5
router