python - 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 种线型.. 像这样继续......但我愿意学习其他可能性......例如,我知道我可以定义两段线之间的破折号空间等等..但让我们一次做一件事
解决方案
您想将颜色循环器“添加”到线型循环器。由于您只能添加两个相同长度的循环器,为了达到“第一种颜色 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 文档中有关循环器的教程。
推荐阅读
- html - 如何在Angular 8中获取多个复选框的值
- python - 获取列表中所有可能的值组合——Python
- php - 带有车辆选择和在 php 中分配时间的 Html 表视图
- haskell - 在 where 子句中进行类型推断
- javascript - 如何在js函数的同一页面上创建多个实例
- android - Revenuecat 在 Android Studio 中检查订阅者状态和购买时出现错误
- unity3d - 无法在 EditorWindow 中更改按钮 GUIStyle 背景
- python - 外键可以连接到多个表吗?
- oracle - 在oracle中将表与Sum(column)按列分组
- java - Antlr 可以将嵌入式语法路由到单独的文件进行处理吗?