【问题标题】:Cycling through colors and defining a color map matplotlib循环使用颜色并定义颜色图 matplotlib
【发布时间】:2020-07-29 11:18:14
【问题描述】:

我正在遍历文件路径列表,我希望每个子列表都有一个单独的数字。在每个子列表中,我将文件作为数据框打开,绘制 y1 和 y2(我想要相同的颜色),然后移动到该列表中的下一个文件/数据框,我希望两行的颜色都与第一行不同.

我的问题是如何定义我想要使用的颜色图?无论我选择使用什么 cmap,以下内容似乎对我的绘图输出没有任何影响:

for x in configurations:                          # configurations is a list of list of directories
    plt.rcParams['image.cmap'] = 'Accent'         # Not working
    prop_cycle = plt.rcParams['axes.prop_cycle']
    colors = prop_cycle.by_key()['color']
    for i, y in enumerate(x):        
        df = pd.read_fwf(y, header=None, comment='#', skiprows=53, skip_empty_rows=True)           
        df['epoch'] = pd.to_datetime(df['epoch'])
        line1 = plt.plot(df['epoch'],df['y1'], color=colors[i])
        line2 = plt.plot(df['epoch'],df['y2'], color=colors[i])
    plt.show()

【问题讨论】:

    标签: python matplotlib colormap


    【解决方案1】:

    plt.rcParams['axes.prop_cycle'] 计算为 cycler 对象, 本身并不是特别有用,但您可以致电cycler 获取可以传递给nextitertools.cycle 对象 在 绘图命令的参数列表

    import matplotlib.pyplot as plt 
    import numpy as np                                                                                     
    
    configurations = [ ['f0', 'f1', 'f2'], ['g0', 'g1']]                                                   
    
    def get_df(fname):
    # I have no Pandas, this fakes a data set
        global n 
        n += 0.2 
        return dict(x=[0,1,2,3,4,5], 
                    y1=[0,2+n,3+n,3+n,2+n,0], 
                    y2=[3+n,2+n,0,-2-n,-3-n, -3-n])                                                        
    
    n = 0 
    for conf in configurations: 
        prop_cycle = plt.rcParams['axes.prop_cycle']() 
        fig = plt.figure(constrained_layout=True) 
        ax = fig.add_subplot() 
        for fname in conf: 
            curr_dict = next(prop_cycle) 
            df = get_df(fname) 
            ax.plot('x', 'y1', '', data=df, label='y1 from '+fname, **curr_dict) 
            ax.plot('x', 'y2', '', data=df, label='y2 from '+fname, **curr_dict, linestyle='--') 
        ax.legend() 
        fig.savefig(fname[0]+'.png')                                                                       
    

    每次输入新数字时,上面都会重置循环,我希望 这是合理的……否则将语句 prop_cycle = plt.rcParams['axes.prop_cycle']() 放在循环之外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-05
      • 2021-05-03
      • 2015-04-10
      • 2015-08-12
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      相关资源
      最近更新 更多