我想绘制一些通过测量得到的数据。 我将在每个图上绘制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')
...
然后问题,我当然可以在rcParams中重新定义颜色序列,如下所示:
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()调用到下一个,我需要有正常的颜色增量。
答案 0 :(得分:5)
您可以基于每个轴设置颜色循环
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
中的限制迭代)。
自动循环适用于原型制作,但您应养成为实际绘图指定颜色的习惯。
答案 1 :(得分:2)
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())
通过指定拟合线的color
,颜色循环不会在“拟合”数据上递增。