Python:制作从红色到蓝色的颜色条
我有一系列的线条(目前总共60行),我想画在同一个图上,以显示特定过程的时间演变。绘制当前的线,使得最早的时间步长绘制在100%红色,最新的时间步长绘制在100%蓝色,中间的时间步长是基于它们在什么时间的红色和蓝色的某种混合。(红色的数量随着时间的增加而线性减少,而蓝色的数量随着时间的增加而线性增加;一个简单的颜色渐变)某种颜色的条形码以连续的方式显示出来。我的意思是,我想要一个底部是红色的,在顶部是蓝色的,在红色的中间是蓝色的,蓝色的是红色的,蓝色的和红色的,蓝色的线条和我绘制的线条一样。我也想把轴放在这个颜色条上,这样我就可以。显示与哪个时间步对应的颜色 我已经阅读了Python:制作从红色到蓝色的颜色条,python,matplotlib,colors,Python,Matplotlib,Colors,我有一系列的线条(目前总共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月)中添加的,因此该特定位在早期版本中不起作用。