多个图例和多种颜色/形状matplotlib

时间:2014-09-29 15:40:01

标签: python numpy matplotlib plot legend

我想同时绘制来自大约20多个文件的数据。我试图以不同的颜色绘制每个文件的每组数据,每个数据都有不同的图例。我已经看过一些例子和matplotlib教程,但我很少迷失在这里。如何把传说和每一套给出不同的形状。

例如:输入是来自具有单独阈值的多个文件的数据集。 文件名:file1_th0, file1_th0.1等等。所以我想制作相同形状/颜色的不同文件的所有类似阈值数据。还要给出正确的传说。我可以很好地绘制我需要的数据集,但是我无法为不同的阈值设置单独的形状。这方面的任何建议都会很棒。

代码:

import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
from pylab import*
import math
from matplotlib.ticker import LogLocator


for fname in ('file1_th0', 'file1_th0.1','file1_th0.01', 'file1_th0.001', 'file1_th0.001'):
    data=np.loadtxt(fname)
    X=data[:,2]
    sorted_data = np.sort(X)    
    cdf=np.arange(len(sorted_data))/float(len(sorted_data))
    ccdf = 1 - cdf  
    plt.plot(sorted_data,ccdf,'r-', label = 'label1')

for fname in ('file2_th0', 'file2_th0.1', 'file2_th0.01', 'file2_th0.001','file2_th0.0001'):
    data=np.loadtxt(fname)
    X=data[:,2]
    sorted_data = np.sort(X)    
    cdf=np.arange(len(sorted_data))/float(len(sorted_data))
    ccdf = 1 - cdf  
    plt.plot(sorted_data,cdf,'b-')

for fname in ('file3_th0','file3_th0.1','file3_th0.01','file3_th0.001', 'file3_th0.0001'):
    data=np.loadtxt(fname)
    X=data[:,4]
    sorted_data = np.sort(X)    
    cdf=np.arange(len(sorted_data))/float(len(sorted_data))
    ccdf = 1 - cdf  
    plt.plot(sorted_data,cdf,'m-')

for fname in ('file4_th0', 'file4_th0.1', 'file4_th0.01', 'file4_th0.001','file4_th0.0001'):
    data=np.loadtxt(fname)
    X=data[:,4]
    sorted_data = np.sort(X)    
    cdf=np.arange(len(sorted_data))/float(len(sorted_data))
    ccdf = 1 - cdf  
    plt.plot(sorted_data,cdf,'c--')

plt.xlabel('this is x!')
plt.ylabel('this is y!')
plt.gca().set_xscale("log")
#plt.gca().set_yscale("log")
plt.show()

1 个答案:

答案 0 :(得分:0)

首先,您需要为plot来电添加标签和markers并添加legend来电,例如:

b=np.arange(0,20,1)
c=b*0.5
d=b*2

plt.plot(b,d,color='r',marker='o',label='set 1')
plt.plot(b,c,color='g',marker='*',label='set 2')

plt.legend(loc='upper left')

enter image description here

然而,在您的循环示例中,您最终会得到许多相同的图例条目,我认为您不想这样做。

为了解决这个问题,你可以:

n=0
for whatever in whatever: # e.g. your for loops
    # do stuff with whatever
    if n==0:
        plt.plot(sorted_data,cdf,color='r',marker='o',label='set 1')
    else:
        plt.plot(sorted_data,cdf,color='r',marker='o')
    n += 1