我有一个循环,我创建一些情节,我需要为每个情节独特的标记。我想创建一个函数,它返回随机符号,并以这种方式在我的程序中使用它:
for i in xrange(len(y)): plt.plot(x, y [i], randomMarker())
但我觉得这条路不太好。我需要这个只是为了区分图例上的图,因为图不能用线连接,它们必须只是一组点。
f8rj6qna1#
itertools.cycle将无限期地迭代一个列表或元组。这比随机选择标记的函数更可取。
itertools.cycle
import itertools marker = itertools.cycle((',', '+', '.', 'o', '*')) for n in y: plt.plot(x,n, marker = marker.next(), linestyle='')
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()
x33g5p2x2#
似乎还没有人提到用于循环属性的内置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()
但是,这样你就失去了色彩循环。您可以通过将颜色cycler和标记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()
当添加循环时,它们需要具有相同的长度,因此在这种情况下,我们只使用markercycle的前四个元素:
markercycle
plt.gca().set_prop_cycle(colorcycle + markercycle[:4]) # gca()=current axis
8i9zcol23#
您也可以使用标记生成的元组,例如。作为
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循环结合使用
ubof19bj4#
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()
5m1hhzi45#
只需手动创建一个包含标记字符的数组并使用它,例如:
markers=[',', '+', '-', '.', 'o', '*']
5条答案
按热度按时间f8rj6qna1#
itertools.cycle
将无限期地迭代一个列表或元组。这比随机选择标记的函数更可取。Python 2.x
Python 3.x
你可以使用它来生成这样的图(Python 2.x):
x33g5p2x2#
似乎还没有人提到用于循环属性的内置pyplot方法。这就是:
但是,这样你就失去了色彩循环。您可以通过将颜色
cycler
和标记cycler
对象相乘或相加来添加背景色,如下所示:当添加循环时,它们需要具有相同的长度,因此在这种情况下,我们只使用
markercycle
的前四个元素:8i9zcol23#
您也可以使用标记生成的元组,例如。作为
详情请参见Matplotlib markers doc site。
此外,这还可以与上面提到的itertools.cycle循环结合使用
ubof19bj4#
5m1hhzi45#
只需手动创建一个包含标记字符的数组并使用它,例如: