遍历标记时出现“ ValueError:无法识别的标记样式-d”

Max*_*ion 2 python matplotlib ipython anaconda

我正在尝试对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()
Run Code Online (Sandbox Code Playgroud)

这样就只能生成marker ='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
Run Code Online (Sandbox Code Playgroud)

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

我认为这与特殊字符有关。我试过其他标记:这些标记.*工作。标记:--不要。

我尝试使用ru(带有# -*- coding: utf-8 -*-)作为标记字符串的前缀。没帮助

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

tmd*_*son 5

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

'-', '--', ':', '-.' 不是标记,而是线型。

因此,这取决于您要绘制的内容。如果您想要一个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])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明