繁体   English   中英

使用matplotlib在折线图下方填充渐变?

Gradient fill beneath line chart using matplotlib?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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 个回复

这个 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()

这给了我这个情节:

平滑渐变填充图

2 Android - 在折线图下方填充颜色

我正在为我们的一个应用程序构建折线图。 图表中的线部分工作正常,但现在我必须用颜色填充线下方的区域,如下图所示。 我正在使用此代码使用画布将线条绘制到位图上。 我需要知道的是,有没有办法轻松找到线下面的区域并使其成为一种颜色,或者我必须计算图形的3个点之间的每个区域并用颜色填充 ...

3 Android achartengine:在折线图下方填充

我发现关于stackoverflow的几个问题,但答案是: 但是,当我在LineChart中使用以上代码片段时(无论填充类型是什么,除了“ below”类型以下),仅填充在线图中行上方的区域,如下所示: “低于”类型部分起作用。 但是连轴下面的区域都会变色。 有人可以帮 ...

4 在现有饼图下方添加折线图

当我点击饼图的一部分时,我想在第一个图表下看到另一个图表(折线图)。 现在我生成了另一个面板图表,但是我丢失了第一个面板,因为第二个图表在第一个面板上绘制,第二个图表绘制了第一个图表,但第二个的尺寸不正确; 看图片。 我该如何调整我的问题? 这是我的第一个图表饼图: 这是我的最终结果: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM