Matplotlib错误栏图不使用标记循环

时间:2016-06-28 14:24:52

标签: python matplotlib

在以下示例中,错误条图不使用axes rc中指定的标记周期,尽管它确实使用了颜色循环。在fmt中指定marker而不是cycler会引发AttributeError: Unknown property fmt。如何使用prop_cycle指定错误条图的标记?我正在使用Matplotlib 1.5.1和Python 3.5.1。

import matplotlib.pyplot as plt
from cycler import cycler
plt.rc('axes', prop_cycle=cycler(color=['orange', 'violet', 'darkgreen'],
                                 marker=['s', 'o', 'd']))
plt.rc('lines', linestyle=None)
plt.errorbar((0, 1), (1, 0), yerr=(0.1, 0.1))
plt.errorbar((0, 1), (0, 1), yerr=(0.1, 0.1))
plt.errorbar((0, 1), (0.5, 0.75), yerr=(0.1, 0.1))

enter image description here

1 个答案:

答案 0 :(得分:0)

虽然这并没有回答所提出的问题,但有两种方法可以使用prop_cycle来解决这个问题。一种是简单地使用for循环来构造图形。如果您不想使用for循环,则可以将生成器函数定义为标记的yield值。这样做的缺点是它不会为每个轴自动重置,但我认为它比for循环更容易使用。 while True:语句是必要的,以使其循环回到开头,就像它是要使用的标记循环一样。

import matplotlib.pyplot as plt
from cycler import cycler

def mfunc(syms):
    while True:
        for s in syms:
            yield s

markers = ['s', 'o']
mark = mfunc(markers)
plt.rc('axes', prop_cycle=cycler(color=['orange', 'violet', 'darkgreen']))
plt.rc('lines', linestyle=None)
plt.errorbar((0, 1), (1, 0), yerr=(0.1, 0.1), marker=next(mark))
plt.errorbar((0, 1), (0, 1), yerr=(0.1, 0.1), marker=next(mark))
plt.errorbar((0, 1), (0.5, 0.75), yerr=(0.1, 0.1), marker=next(mark))

enter image description here