强基初中数学&学Python——第261课 数字和数学第三方模块Matplotlib之七:封装端-使用cycler进行造型

  演示自定义属性循环(property-cycle)设置,以控制多线绘图的颜色和其他样式属性。

  备注:可以在下面的链接找到cycler API的更完整的文档。

https://matplotlib.org/cycler/

  此示例演示了两种不同的API

  1、设置指定默认属性循环的rc参数。这会影响所有后续图表域(axes)(但不会影响已创建的图表域)。

  2、为一对图表域(axes)设置属性循环。

· 

· 

· 

from cycler import cyclerimport numpy as npimport matplotlib.pyplot as plt

  首先,我们将生成一些样本数据,在本例中,是四条偏移正弦曲线。

· 

· 

· 

x = np.linspace(0, 2 * np.pi, 50)offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)yy = np.transpose([np.sin(x + phi) for phi in offsets])

  现在yy已经有了形状(shape)。

· 

print(yy.shape)

  输出

· 

(50, 4)

  所以yy[:, i]是第i条偏移正弦曲线。让我们使用matplotlib.pyplot.rc()设置默认的prop_cycle。我们将通过两个循环器相加来组合颜色循环器和线型循环器。有关组合不同循环器的更多信息,请参阅本教程的底部。

· 

· 

· 

· 

· 

default_cycler = (cycler(color=['r', 'g', 'b', 'y']) +                  cycler(linestyle=['-', '--', ':', '-.']))
plt.rc('lines', linewidth=4)plt.rc('axes', prop_cycle=default_cycler)

  现在我们将生成一个具有两个图表域(axes)的图表(figure),一个图表域在另一个图表域上。在第一个图表域上,我们将使用默认的循环器绘制。在第二个图表域上,我们将使用matplotlib.axes.Axes.set_prop_cycle()设置prop_cycle,这将仅为matplotlib.axes.Axes实例设置prop_cycle。我们将使用第二个循环器,它结合了颜色循环器和线宽循环器。

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

custom_cycler = (cycler(color=['c', 'm', 'y', 'k']) +                 cycler(lw=[1, 2, 3, 4]))
fig, (ax0, ax1) = plt.subplots(nrows=2)ax0.plot(yy)ax0.set_title('Set default color cycle to rgby')ax1.set_prop_cycle(custom_cycler)ax1.plot(yy)ax1.set_title('Set axes color cycle to cmyk')
# Add a bit more space between the two plots.fig.subplots_adjust(hspace=0.3)plt.show()

 

 

matplotlibrc文件或样式文件中设置prop_cycle

  请记住,可以在matplotlibrc文件或样式文件(style.mplstyle)中axes.prop_cycle关键字下设置自定义循环器:

· 

axes.prop_cycle : cycler(color='bgrcmyk')

 

多属性循环

  循环器可以相加:

· 

· 

· 

· 

· 

from cycler import cyclercc = (cycler(color=list('rgb')) +      cycler(linestyle=['-', '--', '-.']))for d in cc:    print(d)

  运行结果:

· 

· 

· 

{'color': 'r', 'linestyle': '-'}{'color': 'g', 'linestyle': '--'}{'color': 'b', 'linestyle': '-.'}

  循环器可以相乘:

· 

· 

· 

· 

· 

from cycler import cyclercc = (cycler(color=list('rgb')) *      cycler(linestyle=['-', '--', '-.']))for d in cc:    print(d)

  运行结果:

· 

· 

· 

· 

· 

· 

· 

· 

· 

{'color': 'r', 'linestyle': '-'}{'color': 'r', 'linestyle': '--'}{'color': 'r', 'linestyle': '-.'}{'color': 'g', 'linestyle': '-'}{'color': 'g', 'linestyle': '--'}{'color': 'g', 'linestyle': '-.'}{'color': 'b', 'linestyle': '-'}{'color': 'b', 'linestyle': '--'}{'color': 'b', 'linestyle': '-.'}

matplotlib.pyplot.rc():

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.rc.html#matplotlib.pyplot.rc

matplotlib.axes.Axes.set_prop_cycle():

https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_prop_cycle.html#matplotlib.axes.Axes.set_prop_cycle

matplotlib.axes.Axes:

https://matplotlib.org/stable/api/axes_api.html#matplotlib.axes.Axes