matplotlib中每个图的独特绘图标记

时间:2012-10-26 17:31:55

标签: python matplotlib

我有一个循环,我创建了一些情节,我需要每个情节的独特标记。我想创建函数,它返回随机符号,并以这种方式在我的程序中使用它:

for i in xrange(len(y)):
    plt.plot(x, y [i], randomMarker())

但我认为这种方式并不好。 我需要这个只是为了区分图例上的图,因为图必须不与线连接,它们必须只是一组点。

5 个答案:

答案 0 :(得分:64)

itertools.cycle将无限期地遍历列表或元组。这比随机为您选择标记的功能更好。

Python 2.x

import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*')) 
for n in y:
    plt.plot(x,n, marker = marker.next(), linestyle='')

Python 3.x

import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*')) 
for n in y:
    plt.plot(x,n, marker = next(marker), linestyle='')

您可以使用它来生成这样的图(Python 2.x):

import numpy as np
import matplotlib.pyplot as plt
import itertools

x = np.linspace(0,2,10)
y = np.sin(x)

marker = itertools.cycle((',', '+', '.', 'o', '*')) 

fig = plt.figure()
ax = fig.add_subplot(111)

for q,p in zip(x,y):
    ax.plot(q,p, linestyle = '', marker=marker.next())

plt.show()

Example plot

答案 1 :(得分:7)

似乎没有人提到循环属性的内置pyplot方法。所以这里是:

import numpy as np
import matplotlib.pyplot as plt
from cycler import cycler

x = np.linspace(0,3,20)
y = np.sin(x)

fig = plt.figure()
plt.gca().set_prop_cycle(marker=['o', '+', 'x', '*', '.', 'X']) # gca()=current axis

for q,p in zip(x,y):
    plt.plot(q,p, linestyle = '')

plt.show()

Marker cycle only

但是,这样您就失去了色彩循环。您可以通过将颜色cycler和标记cycler对象相乘来添加颜色,如下所示:

fig = plt.figure()

markercycle = cycler(marker=['o', '+', 'x', '*', '.', 'X'])
colorcycle = cycler(color=['blue', 'orange', 'green', 'magenta'])
# Or use the default color cycle:
# colorcycle = cycler(color=plt.rcParams['axes.prop_cycle'].by_key()['color'])

plt.gca().set_prop_cycle(colorcycle * markercycle) # gca()=current axis

for q,p in zip(x,y):
    plt.plot(q,p, linestyle = '')

plt.show()

Marker and color cycle combined

答案 2 :(得分:3)

你也可以通过元组使用标记生成,例如如

import matplotlib.pyplot as plt
markers = [(i,j,0) for i in range(2,10) for j in range(1, 3)]
[plt.plot(i, 0, marker = markers[i], ms=10) for i in range(16)]

有关详细信息,请参阅Matplotlib markers doc site

此外,这可以与上面提到的itertools.cycle循环结合使用

答案 3 :(得分:1)

只需手动创建一个包含标记字符的数组并使用它,例如:

 markers=[',', '+', '-', '.', 'o', '*']

答案 4 :(得分:1)

import matplotlib.pyplot as plt
fig = plt.figure()
markers=['^', 's', 'p', 'h', '8']
for i in range(5):
    plt.plot(x[i], y[i], c='green', marker=markers[i])
    plt.xlabel('X Label')
    plt.ylabel('Y Label') 
plt.show()