27

如何从不同目录打开多个文本文件并将它们绘制在带有图例的单个图形上?

4

3 回答 3

30

如果您使用 pylab(包含在 matplotlib 中)而不是直接使用 matplotlib,这相对简单。从文件名和图例名称列表开始,例如 [ ('name of file 1', 'label 1'), ('name of file 2', 'label 2'), ...]。然后你可以使用类似下面的东西:

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

您可能还想在绘图命令中添加类似 fmt='o' 的内容,以便从线更改为点。默认情况下,带有 pylab 的 matplotlib 会在不清除的情况下将其绘制到同一个图形上,因此您可以多次运行 plot 命令。

于 2012-06-28T16:55:14.547 回答
20

假设您的文件如下所示并命名为 test.txt(空格分隔):

1 2
3 4
5 6
7 8

然后:

#!/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()

示例图:

我发现浏览matplotlib站点上的绘图库有助于找出图例和轴标签。

于 2012-06-28T16:49:07.280 回答
6

我觉得最简单的方法是

 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 是图例上显示的字符串
  2. 您可以在 show() 之前绘制尽可能多的数据点系列,将它们全部绘制在同一张图上 这是绘制简单图的简单方法。对于 genfromtxt 中的其他选项,请访问此url
于 2016-06-06T16:33:14.090 回答