" ValueError:无法识别的标记样式-d"当循环标记时

时间:2015-08-04 12:55:49

标签: 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()

这设法只生成标记=' 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 -*-)为标记字符串添加前缀。没有帮助。

我是否必须逃避标记字符串或这里有什么问题?

1 个答案:

答案 0 :(得分:3)

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])

enter image description here