我提出两种方法。第一个可能更清晰:它循环一次,在每个循环中,获取下一个颜色,然后使用该颜色执行两个打印命令。在第二种情况下,它循环并执行所有标记,然后重置颜色并再次循环并执行行。
第一种方法
直接进入颜色周期。如果matplotlib 1.5或更高版本,请使用color=next(ax._get_lines.prop_cycler)['color']。否则color=next(ax._get_lines.color_cycle):import numpy as np
import itertools
import matplotlib.pyplot as plt
m = 5
n = 5
x = np.zeros(shape=(m, n))
plt.figure(figsize=(5.15, 5.15))
plt.clf()
plt.subplot(111)
marker = itertools.cycle(('o', 'v', '^', '', 's', '8', 'p'))
ax = plt.gca()
for i in range(1, n):
x = np.dot(i, [1, 1.1, 1.2, 1.3])
y = x ** 2
#
#for matplotlib before 1.5, use
#color = next(ax._get_lines.color_cycle)
#instead of next line (thanks to Jon Loveday for the update)
#
color = next(ax._get_lines.prop_cycler)['color']
plt.plot(x, y, linestyle='', markeredgecolor='none', marker=marker.next(), color=color)
plt.plot(x, y, linestyle='-', color = color)
plt.ylabel(r'$y$', labelpad=6)
plt.xlabel(r'$x$', labelpad=6)
plt.savefig('test2.png')
另外,注意我把你的\textit{y}改成了$y$。通常你需要数学字体而不是斜体。
第二种方法
如果不想将颜色作为参数发送进来,则可以重置颜色循环并进行两次循环。在这里,我在第一个循环之前重置它,然后在第二个循环之前再次重置它,以确保它从同一个地方开始。import numpy as np
import itertools
import matplotlib.pyplot as plt
m = 5
n = 5
x = np.zeros(shape=(m, n))
plt.figure(figsize=(5.15, 5.15))
plt.clf()
plt.subplot(111)
marker = itertools.cycle(('o', 'v', '^', '', 's', '8', 'p'))
plt.gca().set_prop_cycle(None) #if matplotlib <1.5 use set_color_cycle
for i in range(1, n):
x = np.dot(i, [1, 1.1, 1.2, 1.3])
y = x ** 2
plt.plot(x, y, linestyle='', markeredgecolor='none', marker=marker.next())
plt.gca().set_prob_cycle(None)
for i in range(1, n):
x = np.dot(i, [1, 1.1, 1.2, 1.3])
y = x ** 2
plt.plot(x, y, linestyle='-')
plt.ylabel(r'$y$', labelpad=6)
plt.xlabel(r'$x$', labelpad=6)
plt.savefig('test.png')