Python 如何为matplotlib打印循环中的标记和线设置相同的颜色?

Python 如何为matplotlib打印循环中的标记和线设置相同的颜色?,python,matplotlib,Python,Matplotlib,我必须通过创建循环来使用matplotlib绘制多条线和标记,并且我已经在matplolibrc param文件中设置了轴颜色循环。在循环的每个循环中,将创建一组标记和线(线由单独的命令创建)。但标记和线的颜色根据轴的颜色循环而不同。我希望每次循环运行时,标记和线条的颜色与该循环相同 我已包括可复制代码: import numpy as np import itertools import matplotlib.pyplot as plt m = 5 n = 5 x = np.zeros(sha

我必须通过创建循环来使用matplotlib绘制多条线和标记,并且我已经在matplolibrc param文件中设置了轴颜色循环。在循环的每个循环中,将创建一组标记和线(线由单独的命令创建)。但标记和线的颜色根据轴的颜色循环而不同。我希望每次循环运行时,标记和线条的颜色与该循环相同

我已包括可复制代码:

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'))
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.plot(x, y, linestyle='-')
plt.ylabel(r'\textit{y}', labelpad=6)
plt.xlabel(r'\textit{x}', labelpad=6)
plt.show()
将numpy导入为np
进口itertools
将matplotlib.pyplot作为plt导入
m=5
n=5
x=np.0(形状=(m,n))
plt.图(figsize=(5.15,5.15))
plt.clf()
小地块(111)
marker=itertools.cycle(('o','v','^','s','8','p'))
对于范围(1,n)内的i:
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.plt(x,y,线型='-')
plt.ylabel(r'\textit{y}',labelpad=6)
plt.xlabel(r'\textit{x}',labelpad=6)
plt.show()
使用此代码,我得到的输出是:


我需要在其范围内绘制的标记和线具有相同的颜色。如何在matplotlib中实现这一点?

我介绍了两种方法。第一种可能更干净:它循环一次,在每个循环中获得下一种颜色,然后使用该颜色执行两个打印命令。在第二种情况下,它循环并执行所有标记,然后重置颜色并再次循环并执行线条

第一种方法

直接访问颜色循环。如果matplotlib 1.5或更高版本使用
color=next(ax.\u get\u lines.prop\u cycler)['color']
。否则
color=next(ax.\u get\u line.color\u cycle)


请注意,在matplotlib 1.5版之后的版本中,颜色循环已被属性循环器取代。第一种选择需要:

color = next(ax._get_lines.prop_cycler)['color']
请注意,在Python 3.x中删除了iter.next(),如中所述。如果您运行已接受答案中的示例,您将因此收到AttributeError:

'itertools.cycle' object has no attribute 'next'
对于这两个示例,可以通过替换以下内容来解决:

marker=marker.next()
在plt.plot()中,使用


使用plt.gca()。如果matplotlib 1.5或更高版本,则设置_prop_cycle(None)。使用
marker=next(marker)
而不是
marker=marker.next()
对于Python 3.x,请参见下面的答案。此外,代码中有一个小错误:
plt.gca()。设置_prop_cycle(None)
应该用p而不是b,因此:
plt.gca()。设置_prop_cycle(None)
为什么不
plt.plot(x,y,marker=marker.next())
'itertools.cycle' object has no attribute 'next'
marker=marker.next()
marker=next(marker)