You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中为水平线上下填充区域添加渐变色彩?

解决Matplotlib渐变填充区域限制问题

以下是修正后的代码,可实现仅在水平线(y=50)与曲线之间的区域应用渐变色彩,其余区域无填充:

import numpy as np 
import matplotlib.pyplot as plt 

text = "54.38,53.99,65.39,66.22,57.65,49.17,42.72,42.07,44.88,46.56,55.27,57.28,60.54,65.87,37.61,44.21,50.62,56.15,52.65,52.17,57.71,61.21,60.77,50.74,62.9,56.51,62.1,52.79,53.96,50.33,48.44,43.72,39.03,36.18,41.6,50.44,50.67,53.68,50.05,47.92,40.43,29.87,24.78,15.53,17.37,20.56,20.3,30.22,38.89,45.04,45.87,47.99,50.97,54.59,53.69,48.09,48.56,47.62,52.78,57.26,48.77,51.6,56.6,58.37,48.39,43.63,42.15,40.05,33.62,48.73,45.29,51.47,50.73,51.52,54.86,49.18,51.03,50.26,45.73,46.7,52.0,42.17,49.93,53.08,51.34,52.44,54.06,50.56,51.04,55.47,52.71,52.36,53.59,65.08,62.74,59.23,56.07,49.21,46.67,40.62,44.59,44.89,35.57,37.67,49.74,46.52,38.47,42.08,49.73,53.82,60.76,56.2,56.41,53.83,59.9,51.06,46.9,49.11,36.01,46.72,56.53,59.04,58.52,60.78,60.02,51.78,54.78,52.88,51.73,59.76,67.84,66.63,60.97,53.69,53.17,52.44,46.54,49.08,43.62,40.81,41.64,43.3,46.36,58.07,54.95,50.82,54.17,51.37,55.26,53.55,47.57,36.05,38.66,35.3,51.02,54.96,59.34,53.47,48.34,50.25,54.06,49.99,47.44,41.59,37.58,42.39,41.41,41.84,47.77,52.75,54.84,49.63,51.5,56.26,52.47,49.35,47.13,35.94,28.42,33.14,44.38,56.38,59.63,60.86,64.35,54.59,63.34,74.68,66.29,58.33,57.64,64.64,61.49,59.11,53.72,60.37,56.66,56.92,61.58,57.21,58.12,61.93,45.75,54.77,52.95,50.06,54.54,52.64,48.31,49.9,56.49,54.99,51.83,61.78,50.93,52.92,58.76,58.82,51.26,48.29,41.18,50.69,54.0,45.13,48.72,45.32,42.29,30.57,41.28,53.54,55.47,57.54,53.48,50.01,52.42,55.38,53.12,53.31,56.26,57.56,53.87,53.48,53.82,56.8,58.31,60.45,63.22,68.44,76.04,72.14,75.31,64.74,56.5,60.42,54.05,55.62,52"
y = np.array([float(i) for i in text.split(",")])
x = np.arange(len(y))

fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))
cmap="Spectral"
ymin = 10
ymax = 80
xi, yi = np.meshgrid(x, np.linspace(ymin, ymax, 100))

# 创建掩码:限制渐变区域在曲线与y=50之间(上方)
mask_above = np.ma.masked_where((yi > y[np.newaxis, :]) | (yi < 50), yi)
ax.contourf(xi, yi, mask_above, cmap=cmap, levels=np.linspace(ymin, ymax, 100))

# 创建掩码:限制渐变区域在曲线与y=50之间(下方)
mask_below = np.ma.masked_where((yi < y[np.newaxis, :]) | (yi > 50), yi)
ax.contourf(xi, yi, mask_below, cmap=cmap, levels=np.linspace(ymin, ymax, 100))

ax.axhline(50, linestyle="--", linewidth=1.0, color="k")
ax.plot(x,y, color="k")
ax.set_ylim(ymin, ymax)
plt.show()

关键修改说明:

  1. 掩码数组创建:使用np.ma.masked_where分别定义两个区域的掩码:
    • mask_above:仅保留y值在50到曲线之间的区域(曲线高于50时)
    • mask_below:仅保留y值在曲线到50之间的区域(曲线低于50时)
  2. 分区域渐变填充:对两个掩码后的区域分别调用contourf,确保渐变只出现在目标范围内
  3. 移除冗余操作:删除了原代码中全局渐变背景和白色填充的步骤,避免覆盖目标区域

内容的提问来源于stack exchange,提问作者Tuyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:25:54