matplotlib自定义线色和线型循环仪

时间:2018-07-08 11:48:53

标签: python matplotlib

我正在编写一个python类,使用适合我的目的的参数(Elsevier论文)来生成图形(现在,我已经读过here,它可以计算出几种颜色和几种线型之间的循环,

在我的课堂上,我使用略有不同的语法来设置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'] )"

现在我想在颜色上使用(如链接中所报告的)循环器,在线型上同时使用循环器..某些机构可以帮助我如何使用我正在使用的语法tat来实现此目的?

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

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

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

具有循环线型['-', '--', ':', '-.']的第一种颜色第一种线型..第四种颜色 第4种线型,第5种颜色(因为只有4种线型)..然后再按这种方式进行处理...但是我愿意学习其他可能性...例如,我知道我可以定义两个之间的破折号线的两段,依此类推..,但让我们一次做一件事

1 个答案:

答案 0 :(得分:1)

您要将颜色循环仪“添加”到线型循环仪中。由于只能添加两个相同长度的循环器,因此为了达到要求“第一种颜色1st线型..第4种颜色4线型,第5种颜色(因为只有4种线型)又要1种线型” 需要将线型加倍。

然后,您可以为颜色创建一个循环器,为线型的两倍列表创建一个循环器,并将其附加到'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()

enter image description here

通常,请参阅matplotlib文档中的tutorial about cyclers