我可以在matplotlib中循环线条样式吗

95 投票
9 回答
54676 浏览
提问于 2025-04-17 04:30

我知道怎么在matplotlib中循环使用一系列颜色。但是,我想知道是否可以用类似的方法来循环使用线条样式(比如实线、虚线、波浪线等等)?这样做是为了让我的图表在打印时更容易阅读。有没有什么建议可以实现这个呢?

9 个回答

16

这里有一些使用循环器来开发样式集的例子。

循环器可以添加到组合中,比如红色用'-',蓝色用'--',等等。

plt.rc('axes', prop_cycle=(cycler('color', list('rbgk')) +
                           cycler('linestyle', ['-', '--', ':', '-.'])))

直接在坐标轴上使用:

ax1.set_prop_cycle(cycler('color', ['c', 'm', 'y', 'k']) +
                   cycler('lw', [1, 2, 3, 4]))

循环器可以进行组合(http://matplotlib.org/cycler/),这样可以提供更多独特的样式选择。

for ax in axarr:
    ax.set_prop_cycle(cycler('color', list('rbgykcm')) *
                      cycler('linestyle', ['-', '--']))

另请参见:http://matplotlib.org/examples/color/color_cycle_demo.html

26

即将发布的matplotlib v1.5版本将不再使用color_cycle这个功能,而是引入新的prop_cycler功能:http://matplotlib.org/devdocs/users/whats_new.html?highlight=prop_cycle#added-axes-prop-cycle-key-to-rcparams

plt.rcParams['axes.prop_cycle'] = ("cycler('color', 'rgb') +"
                                   "cycler('lw', [1, 2, 3])")

接下来,继续创建你的坐标轴和图表吧!

133

像这样可能就能解决问题:

import matplotlib.pyplot as plt
from itertools import cycle
lines = ["-","--","-.",":"]
linecycler = cycle(lines)
plt.figure()
for i in range(10):
    x = range(i,i+10)
    plt.plot(range(10),x,next(linecycler))
plt.show()

结果: 在这里输入图片描述

更新版本说明(v2.22)

import matplotlib.pyplot as plt
from cycler import cycler
#
plt.figure()
for i in range(5):
    x = range(i,i+5)
    linestyle_cycler = cycler('linestyle',['-','--',':','-.'])
    plt.rc('axes', prop_cycle=linestyle_cycler)
    plt.plot(range(5),x)
    plt.legend(['first','second','third','fourth','fifth'], loc='upper left', fancybox=True, shadow=True)
plt.show()

想要更详细的信息,可以查看matplotlib关于“使用cycler进行样式设置”的教程
要查看输出结果,请点击"显示图形"

撰写回答