Python:制作从红色到蓝色的颜色条

Python:制作从红色到蓝色的颜色条,python,matplotlib,colors,Python,Matplotlib,Colors,我有一系列的线条(目前总共60行),我想画在同一个图上,以显示特定过程的时间演变。绘制当前的线,使得最早的时间步长绘制在100%红色,最新的时间步长绘制在100%蓝色,中间的时间步长是基于它们在什么时间的红色和蓝色的某种混合。(红色的数量随着时间的增加而线性减少,而蓝色的数量随着时间的增加而线性增加;一个简单的颜色渐变)某种颜色的条形码以连续的方式显示出来。我的意思是,我想要一个底部是红色的,在顶部是蓝色的,在红色的中间是蓝色的,蓝色的是红色的,蓝色的和红色的,蓝色的线条和我绘制的线条一样。我也

我有一系列的线条(目前总共60行),我想画在同一个图上,以显示特定过程的时间演变。绘制当前的线,使得最早的时间步长绘制在100%红色,最新的时间步长绘制在100%蓝色,中间的时间步长是基于它们在什么时间的红色和蓝色的某种混合。(红色的数量随着时间的增加而线性减少,而蓝色的数量随着时间的增加而线性增加;一个简单的颜色渐变)某种颜色的条形码以连续的方式显示出来。我的意思是,我想要一个底部是红色的,在顶部是蓝色的,在红色的中间是蓝色的,蓝色的是红色的,蓝色的和红色的,蓝色的线条和我绘制的线条一样。我也想把轴放在这个颜色条上,这样我就可以。显示与哪个时间步对应的颜色

我已经阅读了
matplotlib.pyplot.colorbar()的文档
但是,如果不使用matplotlib以前定义的一个颜色映射,我无法确定如何完成我想做的事情。我的猜测是,我需要定义自己的颜色映射,从红色过渡到蓝色,然后将其提供给
matplotlib.pyplot.colorbar()
并获取我想要的颜色栏

下面是我用来绘制线条的代码示例:

import numpy as np
from matplotlib import pyplot as pp

x= ##x-axis values for plotting

##start_time is the time of the earliest timestep I want to plot, type int
##end_time is the time of the latest timestep I want to plot, type int

for j in range(start_time,end_time+1):
    ##Code to read data in from time step number j
    y = ##the data I want to plot
    red = 1. - (float(j)-float(start_time))/(float(end_time)-float(start_time))
    blue = (float(j)-float(start_time))/(float(end_time)-float(start_time))
    pp.plot(bin_center,spectrum,color=(red,0,blue))
pp.show()
编辑:

也许这会让我的意思更清楚。下面是我的数字:


每一条线在不同的时间步长上显示X值与Y值之间的关系。红线是较早的时间步长,蓝色线是稍后的时间步长,紫色线在中间,正如上面所定义的。随着这个已经绘制,我将如何创建颜色条(如果可能的话,垂直地在右边)。将线的颜色(连续)映射到每种颜色所代表的时间步长的时间值?

这里需要做两件事

  • 创建红色到蓝色的贴图,因为这不是
    matplotlib.cm
    中的标准贴图之一
  • 创建从时间值到颜色值的映射,该颜色值由
    matplotlib.pyplot.plot()
    识别
  • 目前,您基本上是通过
    red
    blue
    变量来执行这两项操作,这对于
    plt.plot()
    ,但是
    plt.colorbar()是很好的
    将需要此信息作为Matplotlib可映射对象,例如
    ScalarMapable
    。如果在开始打印之前设置此对象,还可以使用它在
    plt.plot()调用中选择适当的颜色

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.colors as mcol
    import matplotlib.cm as cm
    
    start_time = 100
    end_time = 120
    
    # Generate some dummy data.
    tim = range(start_time,end_time+1)
    xdat = np.arange(0,90.1)
    ydat = [np.sin(0.2*(xdat-t)/np.pi) for t in tim]
    
    
    # Make a user-defined colormap.
    cm1 = mcol.LinearSegmentedColormap.from_list("MyCmapName",["r","b"])
    
    # Make a normalizer that will map the time values from
    # [start_time,end_time+1] -> [0,1].
    cnorm = mcol.Normalize(vmin=min(tim),vmax=max(tim))
    
    # Turn these into an object that can be used to map time values to colors and
    # can be passed to plt.colorbar().
    cpick = cm.ScalarMappable(norm=cnorm,cmap=cm1)
    cpick.set_array([])
    
    
    
    F = plt.figure()
    A = F.add_subplot(111)
    for y, t in zip(ydat,tim):
        A.plot(xdat,y,color=cpick.to_rgba(t))
    
    plt.colorbar(cpick,label="Time (seconds)")
    

    看看这个问题的答案@TheDude有太多我不明白的地方,在答案中,我不可能知道如何将其转化为我的问题。当我运行上面的内容时,Python声称
    label
    不是
    plt.colorbar()的关键字参数
    。如果我删除标签部分,尽管一切正常。看起来
    标签
    是在Matplotlib v1.3.0(2013年5月)中添加的,因此该特定位在早期版本中不起作用。