当前位置 : 主页 > 编程语言 > java >

通过cycler实现属性的自动映射

来源:互联网 收集:自由互联 发布时间:2022-06-23
在matplotlib中,默认存在一个颜色的自动映射机制,当我们绘制多条直线时,会通过这个颜色映射机制来为每条直线赋予不同的颜色,代码如下 import matplotlib.pyplot as plt import numpy as np x


在matplotlib中,默认存在一个颜色 的自动映射机制,当我们绘制多条直线时,会通过这个颜色映射机制来为每条直线赋予不同的颜色,代码如下

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x = np.linspace(0, 3 * np.pi, 50)
>>> offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
>>> for i in range(6):
... y = np.sin(x) + i
... plt.plot(x, y)
...

>>> plt.show()

输出结果如下

通过cycler实现属性的自动映射_公众号

具体是如何实现这个功能的呢?其实是通过axes.prop_cycle这个属性,该属性用于设置一些基本的属性映射,默认情况下,设置了颜色的自动映射

>>> import matplotlib
>>> matplotlib.rcParams['axes.prop_cycle']
cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])

可以看到,默认的映射属性为颜色,然后对应了一系列的颜色梯度,当我们绘制多条颜色时,每条直线的颜色对应该颜色梯度中的一个具体颜色。当线条个数超出了颜色梯度的范围时,会自动循环利用,代码如下

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x = np.linspace(0, 3 * np.pi, 50)
>>>
>>> offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
>>> for i in range(20):
... y = np.sin(x) + i
... plt.plot(x, y)
...
>>> plt.show()

输出结果如下

通过cycler实现属性的自动映射_数据分析_02

可以看到,超过10条之后,线条的颜色出现了循环重复。通过cyler模块,我们可以自定义这样的属性循环,用法如下

>>> from cycler import cycler
>>> custom_cycler = cycler(color=['c', 'm', 'y', 'k'])
>>> fig, ax = plt.subplots()
>>> ax.set_prop_cycle(custom_cycler)
>>> x = np.linspace(0, 3 * np.pi, 50)
>>> offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
>>> for i in range(6):
... y = np.sin(x) + i
... ax.plot(x, y)
...
>>> plt.show()

上述代码通过Cycler定义了颜色的循环,然后通过set_prop_cycle将该颜色循环添加到特定的axes对象上,输出结果如下

通过cycler实现属性的自动映射_数据分析_03

其实,该循环可以定义的属性很多,颜色,线条宽度,线条样式等常用属性都可以进行定义,而且不同的循环还可以进行叠加,代码如下

>>> from cycler import cycler
>>> custom_cycler = cycler(cycler(color=['c', 'm', 'y']) + cycler(linestyle=['-', '--', ':']))
>>> fig, ax = plt.subplots()
>>> ax.set_prop_cycle(custom_cycler)
>>> x = np.linspace(0, 3 * np.pi, 50)
>>> offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
>>> for i in range(6):
... y = np.sin(x) + i
... ax.plot(x, y)
...
>>> plt.show()

当多个循环相加时,必须保证其长度相同,上述代码中每个属性的梯度长度都为3,输出结果如下

通过cycler实现属性的自动映射_数据分析_04

通过cycler为相同元素添加属性的自动映射,极大提高了绘图效率。

·end·


通过cycler实现属性的自动映射_公众号_05

一个只分享干货的

生信公众号



【转自:武汉网站制作 http://www.wh5w.com提供,感恩】
上一篇:极坐标系在数据可视化中的巧妙运用
下一篇:没有了
网友评论