我正在尝试生产线下具有渐变填充的折线图。 我已经在网上搜索了数小时以寻求解决方案,但是没有一个专门针对我在寻找什么。

ma = average_rate(t[0], window=900, interval=60)
fig = Figure(figsize=(8.5, 1.5), dpi=100)
canvas = FigureCanvasAgg(fig)

col = '#4f81b3'
ax = fig.add_axes([0.076, 0.11, 0.88, 0.74])

dts, vals = zip(*ma)
ax.fill(dts, vals, color=col)
fig.savefig(b, format='png')

这将产生以下图表:

我尝试将colormaps,contourf,fill_between等与我在网上找到的代码一起使用,但无法正常工作,我真的希望有人能够对此问题提供简单的解决方案。

在@Ajean的大力帮助下,我的最新代码如下:

    # dtseries contains a list of datetime.datetime values
    # yvalues contains a corresponding list of y-axis values
    # len(dtseries) == len(yvalues)

    import numpy as np

    # Need dpi for png generation
    fig = Figure(figsize=(8.5, 2), dpi=100)
    # Create axes directly on figure [left, bottom, width, height]
    ax = fig.add_axes([0.076, 0.11, 0.88, 0.74])

    xlims = mdates.date2num([dtseries[0], dtseries[-1]])

    # Construct an image linearly increasing in y
    xv, yv = np.meshgrid(np.linspace(0,1,50), np.linspace(0,1,50))
    zv = yv

    ax.imshow(zv, cmap='PuBu', origin='lower',
              extent=[xlims[0], xlims[1], min(yvalues), max(yvalues)])

    # Erase above the data by filling with white
    ax.fill_between(dtseries, yvalues, max(yvalues), color='w')

    # Make the line plot over the top
    colr = '#325272'
    ax.plot(dtseries, yvalues, color=colr, linewidth=0.5)

    ax.set_ylim(min(yvalues), max(yvalues))

    # Render chart as png to memory
    b = BytesIO()
    fig.savefig(b, format='png')
    return b.getvalue()

这是我得到的:

#1楼 票数:1 已采纳

这个 SO问题上,实际上对此有一个相当不错的答案,以下内容借鉴了主要思想,但是我替换了对imshow而不是contourf的调用,因为我认为它看起来更平滑。 我借用了关键元素,它是将渐变放置在整个图像上,然后使用fill_between在数据上方“擦除”。

import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates

# Fake data using dates as requested
xdata = np.array([datetime.datetime.today()+
                 datetime.timedelta(days=1)*i for i in range(15)])
ydata = np.cumsum(np.random.uniform(size=len(xdata)))
xlims = mdates.date2num([xdata[0], xdata[-1]])

# Construct an image linearly increasing in y
xv, yv = np.meshgrid(np.linspace(0,1,50), np.linspace(0,1,50))
zv = yv

# Draw the image over the whole plot area
fig, ax = plt.subplots(figsize=(5,3))
ax.imshow(zv, cmap='YlGnBu_r', origin='lower',
          extent=[xlims[0], xlims[1], ydata.min(), ydata.max()])

# Erase above the data by filling with white
ax.fill_between(xdata, ydata, ydata.max(), color='w')

# Make the line plot over the top
ax.plot(xdata, ydata, 'b-', linewidth=2)

ax.set_ylim(ydata.min(), ydata.max())
fig.autofmt_xdate()

plt.show()

这给了我这个情节:

平滑渐变填充图

  ask by Rob translate from so

未解决问题?本站智能推荐:

1回复

轮廓图下方的 Matplotlib/CartoPy 实体填充

我希望在我的轮廓数据(Matplotlib 中的轮廓)下方添加一个实体填充。 具体来说,我希望将实体填充限制为特定的 shapefile,在这种情况下,美国大陆的各个州。 我现在的剧情 我当前的代码 请注意,我已经包含了绘制轮廓和 shapefile 的关键内部工作,我已经排除了无关代码(如城
1回复

如何在折线图下方从上一个值增加时以绿色填充体积条形图,在从先前值减少时以红色填充该条形图

我使用此代码在Y轴上填充两列,在X轴上填充日期值的折线图。 我想做的另一件事是在折线图下方添加音量条。 当音量从以前的值减小时,颜色为红色;增大时,颜色为绿色。 老实说,我尝试自己做。 与仅python相比,我发现matplotlib很难。 任何帮助表示赞赏
2回复

Matplotlib图下的渐变填充

我从这两篇SO文章中获得了很多有关在matplotlib中将渐变填充置于曲线下方的信息。 我尝试了同样的事情,在一个轴上绘制多个图,并按顺序排列它们及其alpha,以确保它们可见。 使用此代码输出此图时,PIL出现错误: 是否有可能使图下方的“填充”值进一步下降,并修复右下角的错误?
2回复

使用 Matplotlib 平滑折线图

我有一个如下所示的 Pandas 数据框: 当我尝试在 Matplotlib 中绘制它时,我最终得到了一条非常参差不齐的线条。 有没有办法可以平滑线条,使其看起来更弯曲和流畅? 我曾尝试使用 scipy 的插值,但没有成功。 谢谢
2回复

如何使用 Matplotlib 显示折线图的阴影?

我正在尝试为我拥有的一些数据制作阴影。 在此处查看当前图像 我无法增加阴影的宽度。 有没有办法做到这一点? 这是我目前拥有的:
1回复

如何使用Matplotlib创建折线图

我正在尝试为屏幕截图中显示的示例数据创建折线图。 我google了很多,看了下面的一些链接,并尝试使用matplotlib ,但我无法得到所需的输出,如下面的linegraph(截图)所示,任何人都可以提供一个示例参考入门? 如何获得下面显示的样本输入的折线图? http://www.
1回复

如何使用Matplotlib绘制折线图

我使用pandas读取我的csv文件,并将两列分别转换为数组作为自变量/因变量。 数据读取,数组转换和值分配 然后,当我想使用matplotlib.pyplot绘制折线图时,事实证明'numpy.ndarray'对象没有属性'find'。
1回复

将滑块放在 matplotlib 中的子图下方

我试图在 matplotlib 中的子图的 x 轴正下方放置一个滑块,以便两者以相同的值开始和结束。 有没有一种简单的方法可以做到这一点,这意味着当我创建包含滑块的 plt.axe 时,我不必找到正确的坐标并自己放置它们?