2

我知道这是有据可查的,但我正在努力在我的代码中实现这一点。

我想用颜色图对我的图表下方的区域进行着色。是否有可能有一种颜色,即任何超过 30 点的红色,以及直到该点的渐变?

我正在使用方法fill_between,但如果有更好的方法,我很乐意改变它。

def plot(sd_values):

    plt.figure()
    sd_values=np.array(sd_values)
    x=np.arange(len(sd_values))
    plt.plot(x,sd_values, linewidth=1)
    plt.fill_between(x,sd_values, cmap=plt.cm.jet)
    plt.show()

这是目前的结果。我试过了axvspan,但这没有cmap作为一个选项。为什么下图不显示颜色图?

在此处输入图像描述

4

2 回答 2

5

我不确定cmap参数是否应该是fill_between绘图命令的一部分。在您的情况下,可能要使用fill()命令 btw。

这些填充命令创建多边形或多边形集合。多边形集合可以采用cmapfill无法提供应着色的数据。

(据我所知)当然不可能按照您的意愿用渐变填充单个多边形。

下一个最好的事情是伪造它。您可以绘制阴影图像并根据创建的多边形对其进行裁剪。

# create some sample data
x = np.linspace(0, 1)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x) * 120

fig, ax = plt.subplots()

# plot only the outline of the polygon, and capture the result
poly, = ax.fill(x, y, facecolor='none')

# get the extent of the axes
xmin, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()

# create a dummy image
img_data = np.arange(ymin,ymax,(ymax-ymin)/100.)
img_data = img_data.reshape(img_data.size,1)

# plot and clip the image
im = ax.imshow(img_data, aspect='auto', origin='lower', cmap=plt.cm.Reds_r, extent=[xmin,xmax,ymin,ymax], vmin=y.min(), vmax=30.)

im.set_clip_path(poly)

图像被赋予一个基本上在整个轴上拉伸它的范围。然后 clip_path 使其仅显示在fill绘制多边形的位置。

在此处输入图像描述

于 2013-10-02T08:23:22.263 回答
3

我认为您需要做的就是一次绘制一个数据图,例如:

    import numpy
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    import matplotlib.colors as colors        

    # Create fake data
    x = numpy.linspace(0,4)
    y = numpy.exp(x)

    # Now plot one by one
    bar_width = x[1] - x[0]  # assuming x is linealy spaced
    for pointx, pointy in zip(x,y):
        current_color = cm.jet( min(pointy/30, 30)) # maximum of 30
        plt.bar(pointx, pointy, bar_width, color = current_color)       

    plt.show()

导致: 在此处输入图像描述

于 2013-10-02T09:05:49.380 回答