8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

获取默认线条颜色循环

Amon 1月前

48 0

我注意到,当你绘制时,第一条线是蓝色,然后是橙色,然后是绿色,依此类推。有什么方法可以访问这个颜色列表吗?我已经看过无数关于如何更改颜色循环的帖子了……

我注意到,当你绘图时,第一条线是蓝色,然后是橙色,然后是绿色,依此类推。

有什么方法可以访问这个颜色列表吗?我已经看过无数关于如何更改颜色循环或访问迭代器的帖子,但没有关于如何获取 matplotlib 默认循环的颜色列表的帖子。

帖子版权声明 1、本帖标题:获取默认线条颜色循环
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Amon在本站《matplotlib》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在 matplotlib 版本 >= 1.5 中,您可以打印 rcParam 调用 axes.prop_cycle

    print(plt.rcParams['axes.prop_cycle'].by_key()['color'])
    
    # [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']
    

    或者等效地,在 python2

    print plt.rcParams['axes.prop_cycle'].by_key()['color']
    

    在 <1.5 版本中,这被称为 color_cycle

    print plt.rcParams['axes.color_cycle']
    
    # [u'b', u'g', u'r', u'c', u'm', u'y', u'k']
    

    请注意,默认颜色循环在 2.0.0 版本中发生了变化 http://matplotlib.org/users/dflt_style_changes.html#colors-in-default-property-cycle

  • 谢谢!稍作更正:第一个应该是:lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]

  • @Peter,是的,或者 plt.rcParams['axes.prop_cycle'].by_key()['color']

  • Z S 1月前 0 只看Ta
    引用 5

    通常,不需要从任何地方获取默认颜色循环,因为它是默认的,所以只需使用它就足够了。

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    t = np.arange(5)
    
    for i in range(4):
        line, = ax.plot(t,i*(t+1), linestyle = '-')
        ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':')
    
    plt.show()
    

    enter image description here

    如果你想将 默认 颜色循环用于其他用途,当然有几种选择。

    \'tab10\' 色彩图

    首先应该提到的是, "tab10" 颜色图包含默认颜色循环中的颜色,您可以通过以下方式获取它 cmap = plt.get_cmap("tab10") .

    因此,与上述等价的是

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    t = np.arange(5)
    cmap = plt.get_cmap("tab10")
    for i in range(4):
        ax.plot(t,i*(t+1),   color=cmap(i), linestyle = '-')
        ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':')
    
    plt.show()
    

    来自颜色循环的颜色

    您也可以直接使用颜色循环器 cycle = plt.rcParams['axes.prop_cycle'].by_key()['color'] 。这将给出循环中的颜色列表,您可以使用它进行迭代。

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    t = np.arange(5)
    cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
    
    for i in range(4):
        ax.plot(t,i*(t+1),   color=cycle[i], linestyle = '-')
        ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':')
    
    plt.show()
    

    符号 CN

    最后, CN 符号允许获取 N 颜色循环的第 1 种颜色, color="C{}".format(i) 。但这仅适用于前 10 种颜色( N in [0,1,...9] )

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    t = np.arange(5)
    
    for i in range(4):
        ax.plot(t,i*(t+1),   color="C{}".format(i), linestyle = '-')
        ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':')
    
    plt.show()
    

    此处呈现的所有代码均产生相同的图。

  • 是否可以告诉 matplotlib 使用某种循环?必须遍历颜色数组意味着您必须添加在使用一个完整循环后返回索引 0 的逻辑。

  • @Mehdi 当然,matplotlib 确实使用颜色循环。这个问题要求获取此循环的颜色。

  • 我认为 CN 符号应该在您的答案中更加突出,我差点错过了。我怀疑绝大多数用例都乐于只访问前 10 种颜色,并且将“C1”传递给 friends 比明确获取 prop 循环要简单得多。

  • 啊,谢谢你的 CN 符号!这正是我所需要的,而不用费心去实际获取默认颜色循环的句柄。

  • 重新审视 CN 符号

    我想谈谈 Matplotlib 的一个新发展。在之前的回答中,我们读到

    最后, CN 符号允许获取 N 颜色循环的第 1 种颜色, color="C{}".format(i) 。但这仅适用于前 10 种颜色( N in [0,1,...9] )

    import numpy as np 
    import matplotlib.pyplot as plt 
    
    t = np.linspace(0,6.28, 629)                                                      
    for N in (1, 2): 
        C0N, C1N = 'C%d'%(N), 'C%d'%(N+10) 
        plt.plot(t, N*np.sin(t), c=C0N, ls='-',  label='c='+C0N) 
        plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N) 
    plt.legend() ; plt.grid() ; plt.show()                                           
    

    给出

    enter image description here

  • @Luca 我没有来源,我只是发现它可以工作...无论如何,最终的来源是 Matplotlib 源代码,但是 .../matplotlib/colors.py 有 > 2000 行,可惜我在寻找回答您的问题时还没有找到方法。

  • 对于那些感兴趣的人,这个变化是在 v3.1.0 中进行的,并记录在这里的 API 变化中

  • @Luca 有点晚了,但是 tmdavison 18 个月前发布了记录变更的帖子。

  • 如果你正在寻找一个快速的单行代码来获取 matplotlib 用于其线条的 RGB 颜色,那么它就是这里:

    >>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
    (0.12156862745098039, 0.4666666666666667, 0.7058823529411765)
    (1.0, 0.4980392156862745, 0.054901960784313725)
    (0.17254901960784313, 0.6274509803921569, 0.17254901960784313)
    (0.8392156862745098, 0.15294117647058825, 0.1568627450980392)
    (0.5803921568627451, 0.403921568627451, 0.7411764705882353)
    (0.5490196078431373, 0.33725490196078434, 0.29411764705882354)
    (0.8901960784313725, 0.4666666666666667, 0.7607843137254902)
    (0.4980392156862745, 0.4980392156862745, 0.4980392156862745)
    (0.7372549019607844, 0.7411764705882353, 0.13333333333333333)
    (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
    

    或者对于 uint8:

    import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
    (31, 119, 180)
    (255, 127, 14)
    (44, 160, 44)
    (214, 39, 40)
    (148, 103, 189)
    (140, 86, 75)
    (227, 119, 194)
    (127, 127, 127)
    (188, 189, 34)
    (23, 190, 207)
    
返回
作者最近主题: