显示matplotlib颜色条而不是多个绘图的图例,颜色逐渐变化

jko*_*ian 4 python data-visualization matplotlib

我试图制作一个简单的图表,显示许多属于具有特定顺序的大型数据集的曲线,比如说情节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])
Run Code Online (Sandbox Code Playgroud)

(为了清楚起见,这仅仅是为了示例,我的数据实际上存储在一个漂亮的pandas数据帧中.)

在此输入图像描述

而不是图例,我想在图表旁边添加一个颜色条,可能有几个标记和标签(至少是最小值和最大值),以指示哪个颜色属于n的哪个值,但我不是知道如何做到这一点.如果我真的从ColorMap获得我的绘图颜色,我认为事情可能会更容易,但我也不知道如何做到这一点,我也不知道如何从那里开始.

欢迎任何指示!

hit*_*tzg 7

@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()
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述