首页 > 解决方案 > matplotlib 自定义 linecolor 和 line type 循环器

问题描述

我正在编写一个 python 类来使用适合我目的的参数(Elsevier 论文)生成一个绘图,现在我在这里读到了可以计算几种颜色和几种线条样式之间的循环,

在我的课堂上,我使用稍微不同的语法来设置 rcParam :

  myparams = {
            'patch.linewidth' : '0.5',
            'patch.facecolor' : '#348ABD',  # blue
            'patch.edgecolor' : 'EEEEEE',
            'patch.antialiased' : True,
            'font.size': self.parameters['fontsize'],
            'xtick.major.size' : 0.1,
            'xtick.minor.size' : 0.025,
            'axes.edgecolor': self.parameters['box'] ,   
            'axes.linewidth': 1,   # BOX width
            'axes.xmargin': 0,    
            'axes.ymargin': 0,     
            'axes.labelcolor': self.parameters['axeslabel'],     
            'axes.axisbelow': True,   
            'xtick.color': self.parameters['xtickcolor'],                  # doesn't affect the text
            'ytick.color': self.parameters['ytickcolor'],                  # doesn't affect the text 
            'axes.prop_cycle': self.colors( self.parameters['palette'] ) , 
            'grid.linestyle': '--', 
            'grid.alpha': '1',
            'grid.linewidth' : 1,
            'grid.color' : self.parameters['gridcolor'],
            'font.family': self.parameters['font'] ,
            'legend.edgecolor' : self.parameters['legendEdgeColor'],
            'legend.fancybox'  : False,
            'legend.borderpad' : 0.4 ,
            'legend.fontsize'  : self.parameters['legendfontsize'], 
            'legend.loc'       : 'best',
            'legend.framealpha': 1 
            }

         plt.rcParams.update(myparams)

在哪里

self.colors( self.parameters['palette'] ) =  "cycler('color', ['#8DA0CB', '#E78AC3', '#A6D854', '#FFD92F', '#E5C494', '#B3B3B3', '#66C2A5', '#FC8D62'] )"

现在我想使用(如链接中所报告的)颜色上的循环器和线条样式上的循环器..有人可以帮助我如何用我正在使用的语法得到这个?

编辑 感谢您的回复!好吧..老实说,我不知道有什么区别!

但例如我想结合这样的循环:

cycler('color', ['#8DA0CB', '#E78AC3', '#A6D854', '#FFD92F', '#E5C494', '#B3B3B3', '#66C2A5', '#FC8D62'] )

使用循环['-', '--', ':', '-.']线型第一种颜色第一种线型.. 第四种颜色 4 线型,第 5 种颜色(因为只有 4 种线型)再次使用 1 种线型.. 像这样继续......但我愿意学习其他可能性......例如,我知道我可以定义两段线之间的破折号空间等等..但让我们一次做一件事

标签: pythonmatplotlib

解决方案


您想将颜色循环器“添加”到线型循环器。由于您只能添加两个相同长度的循环器,为了达到“第一种颜色 1st linetype .. 4th color 4 linetype , 5th color (因为只有 4 line type) 1 linetype again”的要求,需要将线条样式。

然后,您可以为颜色创建一个循环器,为双倍线型列表创建另一个循环器,并将其附加到'axes.prop_cycle'rcParameter。

import matplotlib.pyplot as plt

colors = ["crimson", "gold", "indigo", "limegreen", "black", "lightseagreen",
          "orange", "darkorchid"]
linestyles = ['-', '--', ':', '-.']

cycle = plt.cycler("color", colors) + plt.cycler("linestyle", linestyles+linestyles)

myparams = {'axes.prop_cycle': cycle}
plt.rcParams.update(myparams)

fig, ax = plt.subplots()
for i in range(16):
    ax.plot([0,1],[i,i])

plt.show()

在此处输入图像描述

一般来说,请参阅matplotlib 文档中有关循环器的教程。


推荐阅读