所以我有一个二维数据数组,可以在同一轴上生成许多时间序列图。目前,每条线的颜色只是循环显示,没有任何意义。
我想以某种方式将每行的颜色映射到其数据的索引 - 因此一组具有低索引的数据显示为红色,然后在高索引处褪色为蓝色。
澄清一下,每条线都应该是相同的颜色,不会随着时间的推移而褪色。差异应该在每一行之间。
谢谢!
所以我有一个二维数据数组,可以在同一轴上生成许多时间序列图。目前,每条线的颜色只是循环显示,没有任何意义。
我想以某种方式将每行的颜色映射到其数据的索引 - 因此一组具有低索引的数据显示为红色,然后在高索引处褪色为蓝色。
澄清一下,每条线都应该是相同的颜色,不会随着时间的推移而褪色。差异应该在每一行之间。
谢谢!
通常您将颜色图传递给绘图函数,但您也可以将数字或数组传递给颜色图并获取颜色作为回报。
因此,要根据变量为每一行着色,请执行以下操作:
numlines = 20
for i in np.linspace(0,1, numlines):
plt.plot(np.arange(numlines),np.tile([i],numlines), linewidth=4, color=plt.cm.RdYlBu(i))
plot(x,y,'r')
对于红线
plot(x,y,'b')
对于蓝线
一个像样的圣诞节需要更多颜色吗?见这里。
更新:
如您所问,手动设置颜色的行太多。那么这个怎么样:
from matplotlib.pyplot import *
x = list(range(10))
amount = 20
for i in range(amount):
y = [j-i for j in x]
c = [float(i)/float(amount), 0.0, float(amount-i)/float(amount)] #R,G,B
plot(x, y, color=c)
show()
它给:
在这里,我使用 rgb 颜色来获得 200 种不同颜色的数组。我没有时间按强度对它们进行排序,但是对数组进行一些打印输出,您可能会弄清楚如何。一个想法是按(排序的)元组之和的索引进行排序。
#colorwheel
import matplotlib.pyplot as plt
from itertools import permutations
from random import sample
import numpy as np
#Get the color-wheel
Nlines = 200
color_lvl = 8
rgb = np.array(list(permutations(range(0,256,color_lvl),3)))/255.0
colors = sample(rgb,Nlines)
#Plots
x = np.linspace(0,2*np.pi)
for i in range(Nlines):
plt.plot(i*np.cos(x),i*np.sin(x),color=colors[i]) #color from index
plt.savefig("SO_colorwheel.png")
plt.show()
给
如果有人仍在寻找一种方法来使用一些颜色图沿路径为曲线着色,而不使用 a scatter
,我认为更好的方法是将其拆分为段并调用colormap
颜色
import matplotlib.pyplot as plt
import numpy as np
def plot_colored(x, y, c, cmap=plt.cm.jet, steps=10):
c = np.asarray(c)
c -= c.min()
c /= c.max()
it=0
while it<с.size-steps:
x_segm = x[it:it+steps+1]
y_segm = y[it:it+steps+1]
c_segm = cmap( c[it+steps//2] )
plt.plot(x_segm, y_segm, c=c_segm)
it += steps
# sample track
t = np.r_[0:10:1000j]
x = t**.25*np.sin(2*np.pi*t)
y = t**.25*np.cos(2*np.pi*t)
plt.figure()
plot_colored(x, y, t)
(较小的步长使其更平滑但更慢)