欢迎关注”生信修炼手册”!
在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()
输出结果如下
具体是如何实现这个功能的呢?其实是通过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()
输出结果如下
可以看到,超过10条之后,线条的颜色出现了循环重复。通过cyler模块,我们可以自定义这样的属性循环,用法如下
>>> from cycler import cycler
>>> custom_cycler = cycler(color=['c', 'm', 'y