【问题标题】:How to plot data from multiple two column text files with legends in Matplotlib?如何在 Matplotlib 中绘制带有图例的多个两列文本文件中的数据?
【发布时间】:2012-06-30 05:15:49
【问题描述】:

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

【问题讨论】:

标签: python numpy matplotlib


【解决方案1】:

我觉得最简单的方法是

 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

【讨论】:

    【解决方案2】:

    假设您的文件如下所示并命名为 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()
    

    我发现浏览 gallery of plots on the matplotlib 网站有助于找出图例和坐标轴标签。

    【讨论】:

    • 为什么要直接解释数据而不是使用 np.loadtxt?
    • 我对 np.loadtxt 的运气一直不太好(通常输入文件比较混乱),但是对于这个简单的例子,它可能会很好用。
    • 为什么不使用分隔符设置为空格的 csv 模块?
    • 或者,就此而言,numpy.genfromtxt。将文本数据加载到 numpy 中的实现方式有很多。
    【解决方案3】:

    如果你直接使用 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' 的内容,以便从线更改为点。默认情况下,matplotlib 和 pylab 会在同一个图形上绘图而不清除它,因此您可以多次运行 plot 命令。

    【讨论】:

    • 感谢您帮助我,但我遇到了一些问题。 “list_of_files”的目的是什么。此外,当我输入 pylab.plot(data[:,0], data[:,1], label=label) 时,我得到了这个 []。如果你能帮助我,那就太好了,谢谢。
    • list_of_files 用于绘制多个文件:只需执行类似 list_of_files = [ ('path to file 1', 'label 1'), ('path to file 2', ' label 2'), ...],并且代码会将它们全部绘制在带有这些标签的同一图上。至于你得到的输出,那是通常的输出;情节应该显示在一个单独的窗口中?如果没有,您的 matplotlib 安装有问题。你在用 ipython 吗?如果是这样,您使用的是 ipython notebook 还是标准 ipython?
    • 谢谢你,我现在可以让它工作了。我有一个问题,即保存的图在新图中有旧图,我拥有新图的唯一方法是重新启动 python IDLE。你为什么会这样?我想要多个图表,但不包含上一个图表/图表中的上一个图表。
    • 我可以通过在绘图前使用 figure() 命令来解决此问题。谢谢。
    • @Hiren 如果它解决了您的问题,请您接受它作为答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多