7

所以我有一个二维数据数组,可以在同一轴上生成许多时间序列图。目前,每条线的颜色只是循环显示,没有任何意义。

我想以某种方式将每行的颜色映射到其数据的索引 - 因此一组具有低索引的数据显示为红色,然后在高索引处褪色为蓝色。

澄清一下,每条线都应该是相同的颜色,不会随着时间的推移而褪色。差异应该在每一行之间。

谢谢!

4

4 回答 4

14

通常您将颜色图传递给绘图函数,但您也可以将数字或数组传递给颜色图并获取颜色作为回报。

因此,要根据变量为每一行着色,请执行以下操作:

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))

在此处输入图像描述

于 2012-12-20T13:44:37.407 回答
2

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()

它给:

在此处输入图像描述

于 2012-12-20T12:38:25.163 回答
1

在这里,我使用 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()

在此处输入图像描述

于 2012-12-20T13:40:22.270 回答
1

如果有人仍在寻找一种方法来使用一些颜色图沿路径为曲线着色,而不使用 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)

(较小的步长使其更平滑但更慢) 例子

于 2019-01-22T20:28:33.743 回答