【问题标题】:"ValueError: Unrecognized marker style -d" when looping over markers循环标记时出现“ValueError:无法识别的标记样式-d”
【发布时间】:2015-10-26 21:32:18
【问题描述】:

我正在尝试编写允许不同标记样式的 pyplot 绘图。这些图是在循环中生成的。标记是从列表中挑选出来的。 出于演示目的,我还包括了一个颜色列表。 版本为Python 2.7.9IPython 3.0.0matplotlib 1.4.3.

这是一个简单的代码示例:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10)
y=x**2

markers=['d','-d','-']
colors=['red', 'green', 'blue']

for i in range(len(markers)):
    plt.plot(x, y, marker=markers[i], color=colors[i])
    plt.show()

这设法仅生成标记 ='d' 的图,对于标记 '-d' 它返回错误:

...
C:\Users\batman\AppData\Local\Continuum\Anaconda\lib\site-packages\matplotlib\markers.pyc in set_marker(self, marker)
    245                 self._marker_function = self._set_vertices
    246             except ValueError:
--> 247                 raise ValueError('Unrecognized marker style {}'.format(marker))
    248 
    249         self._marker = marker

ValueError: Unrecognized marker style -d

但是,我可以改写plt.plot(x, y, markers[i], color=colors[i]) 来让它工作。 color=... 比较有效。

我认为这与特殊字符有关。 我尝试了其他标记: 标记.,* 工作。 标记:,-- 没有。

我尝试在标记字符串前面加上 ru(加上 # -*- coding: utf-8 -*-)。没有帮助。

我必须转义标记字符串还是这里出了什么问题?

【问题讨论】:

    标签: python matplotlib ipython anaconda


    【解决方案1】:

    markers 描述用plt.plot 绘制的点。因此,您可以拥有例如'o', 's', 'D', '^', 'v' '*', '.', ',' 等。有关可用选项的完整列表,请参阅here

    '-', '--', ':', '-.' 不是标记,而是线条样式。

    所以,这取决于您要绘制的内容。如果您想要一个带有菱形标记的 Axes 对象,另一个带有菱形标记和一条线的对象,最后一个只有一条线,您可以这样做:

    %matplotlib inline
    import matplotlib.pyplot as plt
    import numpy as np
    
    x=np.arange(0,10)
    y=x**2
    
    markers=['d','d','None']
    lines=['None','-','-']
    colors=['red', 'green', 'blue']
    
    for i in range(len(markers)):
        # I've offset the second and third lines so you can see the differences
        plt.plot(x, y + i*10, marker=markers[i], linestyle=lines[i], color=colors[i])
    

    【讨论】:

    • 谢谢!我确实错过了文档中pyplot.plot()linestylemarker 之间的区别。看起来我习惯于使用来自pyplot.errorbar(...,fmt='-d')(它具有标识符fmt)或pyplot.plot(...,'-d')(它没有该标识符)的fmt(关键字-)参数感到困惑。此外,虽然 errorbar 的文档条目包含其调用签名,但后者不包含,并且仅在文本中提及 fmt。足以让我怀念它。现在我明白了。 :)
    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多