使用colourmap更改线条颜色

时间:2014-02-27 12:26:42

标签: python colors matplotlib color-mapping

我有很多不同的文件(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()

The Image I can produce now

1 个答案:

答案 0 :(得分:1)

你可以采取一些不同的方法。在您的初始示例中,您使用不同的颜色专门为每条线着色。如果你能够遍历你想要绘制的数据/颜色,那就行得很好。手动分配每种颜色,就像你现在一样,是很多工作,即使是20行,但想象一下,如果你有100或更多。 :)

Matplotlib还允许您使用自己的颜色编辑默认的“颜色循环”。考虑这个例子:

numlines = 10

data = np.random.randn(150, numlines).cumsum(axis=0)
plt.plot(data)

这给出了默认行为,结果为:

enter image description here

如果要使用默认的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)

enter image description here