我正在尝试绘制一个简单的图,该图显示许多曲线,它们以一定的顺序属于一个大型数据集,比方说图1..n。曲线的形状随着n的增加而逐渐变化。读者可以准确地看到哪个图属于n的哪个值并不重要,但是读者应该能够猜测n的量级。
因此,我这样做:
nValues = range(0,30)
xValues = np.linspace(0,10)
dataset = [(xValues-5-0.5*n)**2 for n in nValues]
colors = {n: colorsys.hsv_to_rgb(hue,0.9,0.7) for n,hue in zip(nValues,np.linspace(0,0.7,len(nValues)))}
for n in nValues:
plt.plot(dataset[n],color=colors[n])
(请注意,这仅是示例,我的数据实际上存储在一个不错的pandas数据框中。)
我不想在图例上添加一个颜色条,而不是一个图例,该颜色条上可能带有几个刻度线和标签(至少最小和最大),以指示哪种颜色属于n的哪个值,但是我不知道知道如何做到这一点。我认为,如果实际上从ColorMap中获取绘图颜色,事情可能会更容易,但是我也不知道该怎么做,也不知道该如何进行。
任何指针都欢迎!
最佳答案
@tom和@Joe Kington都是正确的:之前曾有人问过。但是,我尝试以较少的努力作为链接的答案来举例说明。
要使用颜色图(始终将[0,1]中的值映射到颜色),首先需要对数据进行规范化。为此,您可以使用Normalize
类。仅当您打算创建颜色条时才需要ScalarMappable
实例。
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import matplotlib.cm as cm
import numpy as np
# your dataset
nValues = np.arange(0,30)
xValues = np.linspace(0,10)
dataset = [(xValues-5-0.5*n)**2 for n in nValues]
# setup the normalization and the colormap
normalize = mcolors.Normalize(vmin=nValues.min(), vmax=nValues.max())
colormap = cm.jet
# plot
for n in nValues:
plt.plot(dataset[n], color=colormap(normalize(n)))
# setup the colorbar
scalarmappaple = cm.ScalarMappable(norm=normalize, cmap=colormap)
scalarmappaple.set_array(nValues)
plt.colorbar(scalarmappaple)
# show the figure
plt.show()
结果:
关于python - 对于颜色逐渐变化的多个图,显示matplotlib颜色条而不是图例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30779712/