How to plot data from multiple two column text files with legends in Matplotlib?

前端 未结 3 1578
眼角桃花
眼角桃花 2020-11-28 08:52

How do I open multiple text files from different directories and plot them on a single graph with legends?

相关标签:
3条回答
  • 2020-11-28 09:13

    Assume your file looks like this and is named test.txt (space delimited):

    1 2
    3 4
    5 6
    7 8
    

    Then:

    #!/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:

    I find that browsing the gallery of plots on the matplotlib site helpful for figuring out legends and axes labels.

    0 讨论(0)
  • 2020-11-28 09:35

    This is relatively simple if you use pylab (included with matplotlib) instead of matplotlib directly. Start off with a list of filenames and legend names, like [ ('name of file 1', 'label 1'), ('name of file 2', 'label 2'), ...]. Then you can use something like the following:

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

    You also might want to add something like fmt='o' to the plot command, in order to change from a line to points. By default, matplotlib with pylab plots onto the same figure without clearing it, so you can just run the plot command multiple times.

    0 讨论(0)
  • 2020-11-28 09:35

    I feel the simplest way would be

     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 is the string that is displayed on the legend
    2. you can plot as many series of data points as possible before show() to plot all of them on the same graph This is the simple way to plot simple graphs. For other options in genfromtxt go to this url.
    0 讨论(0)
提交回复
热议问题