Matplotlib plot()修改线条颜色循环

Matplotlib plot()修改线条颜色循环,matplotlib,Matplotlib,我想绘制一些通过测量获得的数据,每个数据都与它们的拟合。 我将在每个图上绘制6个测量值,但我希望每个测量数据图的颜色与其适合度相同。从一个测量数据图到下一个,我想要matplotlib的defalut颜色循环 首先,如果按照以下方式加载数据: import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np data1 = np.genfromtxt('data1.txt') fit1 = np.genfrom

我想绘制一些通过测量获得的数据,每个数据都与它们的拟合。 我将在每个图上绘制6个测量值,但我希望每个测量数据图的颜色与其适合度相同。从一个测量数据图到下一个,我想要matplotlib的defalut颜色循环

首先,如果按照以下方式加载数据:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
data1 = np.genfromtxt('data1.txt')
fit1 = np.genfromtxt('fit1.txt')
...
ColourSeq = []
ColourSeqOriginal = mpl.rcParams['axes.color_cycle']
for ind in range(len(ColourSeqOriginal)):
    ColourSeq.append(ColourSeqOriginal[ind])
    ColourSeq.append(ColourSeqOriginal[ind])
mpl.rcParams['axes.color_cycle'] = ColourSeq
那么问题是,我当然可以在rcParams中重新定义颜色序列,如下所示:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
data1 = np.genfromtxt('data1.txt')
fit1 = np.genfromtxt('fit1.txt')
...
ColourSeq = []
ColourSeqOriginal = mpl.rcParams['axes.color_cycle']
for ind in range(len(ColourSeqOriginal)):
    ColourSeq.append(ColourSeqOriginal[ind])
    ColourSeq.append(ColourSeqOriginal[ind])
mpl.rcParams['axes.color_cycle'] = ColourSeq
但这似乎很复杂

最简单的事情似乎是:

plt.figure()
plt.plot(xdata, data1, xdata, fit1, '???')
plt.plot(xdata, data2, xdata, fit2, '???')
plt.plot(xdata, data3, xdata, fit3, '???')
“???”是一个命令选项,我不知道是否存在一些会阻止plt.plot增加给定数据的颜色值的选项。
但是从一个plt.plot()调用到下一个plt.plot()调用,我需要有正常的颜色增量。

plot()没有一个参数会在一次plot()调用中强制所有行使用相同的颜色。防止颜色循环增加的唯一方法是使用
color='x'
指定颜色

以下是一种可能适用于您的替代方法:

ax = plt.gca()
ax.plot(xdata, data1)
ax.plot(xdata, fit1, color=ax.lines[-1].get_color())
ax.plot(xdata, data2)
ax.plot(xdata, fit2, color=ax.lines[-1].get_color())
ax.plot(xdata, data3)
ax.plot(xdata, fit3, color=ax.lines[-1].get_color())

通过指定拟合线的
颜色
,“拟合”数据上的颜色周期不会增加。

您可以按轴设置颜色周期

ax = plt.gca()
ax.set_color_cyle(['r','r','b','b',..])
一种更干净的方法是:

import itertools
colors_ = ['r','b','g','m','k'] # change to what colors you want

datas = [data1, data2, data3]
fits = [fit1, fit2, fit3]
ax = plt.gca()
for d, f, c in zip(datas, fits, itertools.cycle(colors_)):
    ax.plot(xdata, d, color=c)
    ax.plot(xdata, f, color=c) 
这使您可以控制使用何种颜色,如果您决定更改绘制数据和拟合的方式,您只需更改一次,而不是N次。您还可以轻松添加额外的列表(如标签列表、标记类型、线样式等),以控制线的打印方式。(itertools.cycle用于确保颜色在
zip
中永远不是限制性的iterable)


自动循环有利于原型制作,但您应该养成为实际绘图指定颜色的习惯。

您能让您的建议更一致吗?斧头是什么?get_color()?很抱歉,
ax
是您正在绘制的轴
get\u color()
只是从一行返回color属性。这与我所寻找的非常匹配,尽管我希望使用比color=ax.lines[-1]更简单的命令。get\u color()。不管怎样,这是matplotlib。。。谢谢。有趣的一点是matplotlib使用itertools.cycle()在rcParams中循环使用默认颜色。@user1850133确实,谢谢。你也可以通过界面建议编辑(并且你得到了代表)。我一发表我的评论,我就注意到你通过在ans中添加缺少的“in”来更正了你的帖子,所以我删除了我的评论。下次我会继续。