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

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

编辑:

也许这会让我的意思更清楚。下面是我的图: My figure

每行显示不同时间步长的 x 值和 y 值之间的关系。红线是较早的时间步长,蓝线是较晚的时间步长,紫色线在中间,正如我在上面定义的那样。有了这个已经绘制好的,我将如何创建一个颜色条(如果可能,在右侧垂直)将线条的颜色(连续)映射到每种颜色代表的时间步长的时间值?

最佳答案

这里有两件事你需要做。

  1. 创建一个红色到蓝色的彩色 map ,因为这不是 matplotlib.cm 中的标准 map 之一。
  2. 创建从时间值到 matplotlib.pyplot.plot() 识别的颜色值的映射。

目前,您实际上是通过 redblue 变量来完成这两项操作,这对 plt.plot(),但是 plt.colorbar() 将需要此信息作为 Matplotlib 可映射对象,例如 ScalarMappable。如果您在开始绘图之前设置此对象,您还可以使用它在 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)")

enter image description here

关于Python:制作从红色到蓝色的颜色条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748183/

相关文章:

python - 如何使按钮居中并着色

python - blender Python MySQL

python - 使用 oauth2 通过 googleapi gmail python 发送电子邮件

python win32print 不打印

android - 如何在 SeekBar 中制作颜色渐变?

python - matplotlib:绘图完成后释放内存

python - 有没有办法使用 matplotlib 来制作 "3D cloud plot"?

python2.7 : matplotlib in jupyter notebook can't use qt

android - 使 Android Lollipop 中状态栏的工具栏颜色变暗

javascript - style.background 与 grb