python - Matplotlib 颜色和线周期问题
问题描述
我正在编写一个包含所有适合我需要的参数的小类,但是当我定义要完成的 3 个周期时遇到了一个问题。我所做的是:定义 3 种类型的循环(cycle0、cycle1、cycle2)然后在包含几个rcParams
我设置'axes.prop_cycle'
的字典中定义 3 个循环如下:
cycle0 = plt.cycler("color", colors)
cycle1 = plt.cycler("color", colors) + plt.cycler("linestyle", linestyles)
cycle2 = plt.cycler("color", colors) * plt.cycler("linestyle", linestyles)
当我选择使用 cycle0 时,问题就出现了:
'axes.prop_cycle': cycle0,
并且颜色集(我选择的)具有不同的长度,尊重线型,但使用 cycle0 我不想使用线型!我该如何解决这个问题?到目前为止,当我必须使用cycle0时,我必须注释掉cycle1,而当我使用它时,我必须注释掉cycle1
编辑 错误是这个:
ValueError: Can only add equal length cycles, not 6 and 8
但在 myparams 定义中我使用
'axes.prop_cycle': cycle0,
编辑 最小可编译示例:
import numpy as np
import matplotlib.pyplot as plt
def _plot(*args,**kwargs):
linestyles = [(0, ()),(0, (1, 1)),(0, (5, 10)),(0, (5, 5)),(0, (5, 1)),(0, (3, 10, 1, 10)),(0, (3, 5, 1, 5)),(0, (3, 5, 1, 5, 1, 5)) ]
colors = ['#3B4CC0','#7C9FF9','#C0D4F5','#F2CBB7','#EE8568','#B40426']
variable = [*args]
if len(variable) % 3 != 0:
print('Error variable must be coupled (even number)')
raise AttributeError('you must give 2 array x,y followed by string label for each plot')
parameters = {**kwargs}
cycle0 = plt.cycler("color", colors)
cycle1 = plt.cycler("color", colors) + plt.cycler("linestyle", linestyles)
cycle2 = plt.cycler("color", colors) * plt.cycler("linestyle", linestyles)
myparams = {
'axes.prop_cycle': cycle0
}
plt.rcParams.update(myparams)
fig,ax = plt.subplots(1,figsize=(7,4.2))
for i in range(0,len(variable)-1,3):
plt.plot(variable[i],variable[i+1], linewidth=3, label= variable[i+2])
plt.grid(linestyle='--', dashes=(5,7))
plt.show()
def main():
x = np.linspace(0,2*np.pi,100)
y1 = np.sin(x)
y2 = np.sin(2*x)
y3 = np.sin(4*x)
_plot(x,y1,'sin(x)',x,y2,'sin(2x)',x,y3,'sin(3x)')
if __name__ == '__main__' :
main()
相反,如果您评论 cycle1 这行得通!
编辑也许我解释得不好,这段代码(cycle1)是一个循环,我用不同的颜色方案..我报告的那个只是一个例子,说:
此外,如果我在 rcParams 列表(这里我已经报告)中使用 cycle0 只是蓝色到红色的颜色方案。但在我的课堂上有很多颜色方案和很多线条样式....出现在
myparams = {
......
'axes.prop_cycle': cycle0
......
}
是从字典中给出的(看起来是_plot的定义),我想弄清楚这是一种让这个cycle1作为我'axes.prop_cycle'
的选项的方法,我可以在没有注释的情况下切换或取消注释这行代码(cycle1 .... )
解决方案
问题在于cycle1
,不是cycle0
。您可以删除该行,因为它从未在代码中使用。
否则,您需要确保具有相同长度的循环仪。
例如,您可以在颜色循环中再添加两种颜色
colors = ['#3B4CC0','#7C9FF9','#C0D4F5','#F2CBB7','#EE8568','#B40426', "red", "limegreen"]
这样,线条样式和颜色都有 8 个元素。
推荐阅读
- c - 字符串的typedef char指针分配
- php - POST 请求有时返回代码 302,有时返回代码 200
- datetime - 用均值上采样数据
- cgi - 无法运行 CGI 脚本
- excel - 为文本分配类别
- kubernetes - 如何使用 init 容器检查 MySQL 是否准备好连接?
- python - Discord.py 使用他们的 ID 向用户发送 DM
- flutter - Using same riverpod state provider for multiple pages
- spring - 在没有 @DirtiesContext 的情况下如何在 Quarkus 中实现集成测试?
- javascript - 通过 Docker 问题快速安装