这几乎是其他几个问题的重复。关键是 matplotlib 需要一个 ScalarMappable 实例(通常是图像、散点图等)来制作颜色图。如果您不使用创建一个的绘图方法,则很容易伪造一个。您需要一个 Normalize 实例来定义颜色图的最小/最大值/缩放/等,并需要一个 Colormap 实例来定义颜色。
但是,您还有一个额外的问题。您没有使用颜色图,因此您需要构建一个。
这是一个带有离散颜色图的示例:
import numpy as np
import matplotlib.colors as mcolors
import matplotlib.cm
import matplotlib.pyplot as plt
# Your example...
nvalues = range(0,30)
xvalues = np.linspace(0,10)
hsv2rgb = lambda hue: mcolors.hsv_to_rgb([hue,0.9,0.7])
hues = np.linspace(0, 0.7, len(nvalues))
colors = [hsv2rgb(hue) for hue in hues]
dataset = [(xvalues-5-0.5*n)**2 for n in nvalues]
fig, ax = plt.subplots()
for n in nvalues:
ax.plot(dataset[n], color=colors[n])
# Fake a ScalarMappable so you can display a colormap
cmap, norm = mcolors.from_levels_and_colors(range(len(nvalues) + 1), colors)
sm = matplotlib.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm)
plt.show()
如果您更喜欢连续的颜色图:
import numpy as np
import matplotlib.colors as mcolors
import matplotlib.cm
import matplotlib.pyplot as plt
# Your example...
nvalues = range(0,30)
xvalues = np.linspace(0,10)
hsv2rgb = lambda hue: mcolors.hsv_to_rgb([hue,0.9,0.7])
hues = np.linspace(0, 0.7, len(nvalues))
colors = [hsv2rgb(hue) for hue in hues]
dataset = [(xvalues-5-0.5*n)**2 for n in nvalues]
fig, ax = plt.subplots()
for n in nvalues:
ax.plot(dataset[n], color=colors[n])
# Fake a ScalarMappable so you can display a colormap
cmap = mcolors.LinearSegmentedColormap.from_list('my_cmap', colors)
norm = mcolors.Normalize(min(nvalues), max(nvalues))
sm = matplotlib.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm)
plt.show()