我正在编写一个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种线型)..然后再按这种方式进行处理...但是我愿意学习其他可能性...例如,我知道我可以定义两个之间的破折号线的两段,依此类推..,但让我们一次做一件事
答案 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()
通常,请参阅matplotlib文档中的tutorial about cyclers。