代码之家  ›  专栏  ›  技术社区  ›  Drudox lebowsky

matplotlib自定义线条颜色和线条类型cycler

  •  1
  • Drudox lebowsky  · 技术社区  · 7 年前

    我正在编写一个python类,以使用适合我用途的参数(elsevier paper)生成一个绘图,现在我已经阅读了 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'] )"
    

    现在我想用(如链接中所述)一个彩色的Cycler和一个LineStyle上的Cycler。有人能帮我吗?我怎么能用我用的句法来表达?

    编辑 谢谢回复! 好。。老实说,我不知道哪一个是不同的!

    但例如,我想结合这样一个循环:

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   ImportanceOfBeingErnest    7 年前

    'axes.prop_cycle'

    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

    tutorial about cyclers