我正在尝试绘制一个简单的图,该图显示许多曲线,它们以一定的顺序属于一个大型数据集,比方说图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/

10-12 00:24
查看更多