在图表下设置色彩图

时间:2013-10-02 07:59:12

标签: python graph matplotlib color-mapping

我知道这有很好的文档记录,但我很难在我的代码中实现它。

我想使用色彩图对图表下的区域进行着色。是否有可能有一种颜色,即任何超过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作为选项。为什么下图不显示色彩图?

enter image description here

2 个答案:

答案 0 :(得分:4)

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

这些填充命令可创建多边形或多边形集合。多边形集合可以使用cmap,但使用fill时,无法提供应该将其着色的数据。

据我所知,当然不可能的是用渐变填充单个多边形。

接下来最好的事情就是假装它。您可以绘制着色图像并根据创建的多边形进行剪裁。

# 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多边形的位置。

enter image description here

答案 1 :(得分: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()

导致: enter image description here