我有很多不同的文件(10-20),我在x和y数据中读取,然后绘制成一条线。 目前我有标准颜色,但我想使用色彩图。 我查看了许多不同的示例,但无法正确调整我的代码。 我希望使用像gist_rainbow这样的色彩图(即离散色彩图)在每条线(而不是沿着线)之间改变颜色 下图是我目前可以实现的目标。
这就是我的尝试:
import pylab as py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc, rcParams
numlines = 20
for i in np.linspace(0,1, numlines):
color1=plt.cm.RdYlBu(1)
color2=plt.cm.RdYlBu(2)
# Extract and plot data
data = np.genfromtxt('OUZ_QRZ_Lin_Disp_Curves')
OUZ_QRZ_per = data[:,1]
OUZ_QRZ_gvel = data[:,0]
plt.plot(OUZ_QRZ_per,OUZ_QRZ_gvel, '--', color=color1, label='OUZ-QRZ')
data = np.genfromtxt('PXZ_WCZ_Lin_Disp_Curves')
PXZ_WCZ_per = data[:,1]
PXZ_WCZ_gvel = data[:,0]
plt.plot(PXZ_WCZ_per,PXZ_WCZ_gvel, '--', color=color2, label='PXZ-WCZ')
# Lots more files will be plotted in the final code
py.grid(True)
plt.legend(loc="lower right",prop={'size':10})
plt.savefig('Test')
plt.show()
答案 0 :(得分:1)
你可以采取一些不同的方法。在您的初始示例中,您使用不同的颜色专门为每条线着色。如果你能够遍历你想要绘制的数据/颜色,那就行得很好。手动分配每种颜色,就像你现在一样,是很多工作,即使是20行,但想象一下,如果你有100或更多。 :)
Matplotlib还允许您使用自己的颜色编辑默认的“颜色循环”。考虑这个例子:
numlines = 10
data = np.random.randn(150, numlines).cumsum(axis=0)
plt.plot(data)
这给出了默认行为,结果为:
如果要使用默认的Matplotlib色彩映射表,可以使用它来检索颜色值。
# pick a cmap
cmap = plt.cm.RdYlBu
# get the colors
# if you pass floats to a cmap, the range is from 0 to 1,
# if you pass integer, the range is from 0 to 255
rgba_colors = cmap(np.linspace(0,1,numlines))
# the colors need to be converted to hexadecimal format
hex_colors = [mpl.colors.rgb2hex(item[:3]) for item in rgba_colors.tolist()]
然后,您可以将颜色列表分配给Matplotlib中的color cycle
设置。
mpl.rcParams['axes.color_cycle'] = hex_colors
此更改后的任何绘图都会自动循环显示这些颜色:
plt.plot(data)