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

如何在Matplotlib绘制的线条上方填充阴影?

为网格图线条上方区域填充阴影的实现方法

我绘制了一个带有线条的网格图,代码如下:

import matplotlib.pyplot as plt
import numpy as np

# 绘制网格并在每个方格中填充-3到3之间的随机整数
np.random.seed(42)  # 设置随机种子保证结果可复现
square = np.zeros((10, 10), dtype=np.int_)
for x in np.arange(0.5, 10, 1):
    for y in np.arange(0.5, 10, 1):
        value = np.random.randint(-3, 4)
        square[int(x), int(y)] = value
        plt.text(x-0.2, y-0.2, str(value), ha='center', va='center', fontsize=8, color='black')
        
# 计算方格中心坐标并添加蓝色小点
for x in np.arange(0.5, 10, 1):
    for y in np.arange(0.5, 10, 1):
        plt.scatter(x, y, color='blue', s=1)  # 可调整点的大小(s)
        

x_points = [7, 2]
y_points = [0, 10]
plt.plot(x_points, y_points)

# 自定义绘图样式
plt.xlim(0, 10)
plt.ylim(0, 10)
plt.yticks(np.arange(0, 10.01, 1))
plt.xticks(np.arange(0, 10.01, 1))
plt.gca().invert_yaxis()
plt.gca().set_aspect('equal', adjustable='box')
plt.grid()

效果如图:

网格图效果

需求:为线条上方(包含左上角方格的区域)填充阴影。


实现方案

要填充目标区域,可利用Matplotlib的fill_between函数,步骤如下:

  1. 推导直线方程:已知线条端点(7,0)和(2,10),计算得直线斜率为-2,方程为y = -2x + 14。
  2. 生成填充坐标点:用linspace生成x轴范围内的连续点,代入直线方程得到对应y值,保证填充区域平滑。
  3. 执行填充:调用fill_between指定填充范围,设置颜色和透明度避免遮挡原有内容。

修改后的完整代码:

import matplotlib.pyplot as plt
import numpy as np

# 绘制网格并在每个方格中填充-3到3之间的随机整数
np.random.seed(42)  # 设置随机种子保证结果可复现
square = np.zeros((10, 10), dtype=np.int_)
for x in np.arange(0.5, 10, 1):
    for y in np.arange(0.5, 10, 1):
        value = np.random.randint(-3, 4)
        square[int(x), int(y)] = value
        plt.text(x-0.2, y-0.2, str(value), ha='center', va='center', fontsize=8, color='black')
        
# 计算方格中心坐标并添加蓝色小点
for x in np.arange(0.5, 10, 1):
    for y in np.arange(0.5, 10, 1):
        plt.scatter(x, y, color='blue', s=1)  # 可调整点的大小(s)
        

x_points = [7, 2]
y_points = [0, 10]
plt.plot(x_points, y_points)

# ------------------- 添加填充阴影的代码 -------------------
# 生成x轴范围内的连续点,用于绘制平滑的填充区域
x_fill = np.linspace(0, 10, 100)
# 根据直线方程计算对应的y值
y_fill = -2 * x_fill + 14
# 填充线条上方的区域(y轴反转后,上方对应y=10方向)
plt.fill_between(x_fill, y_fill, 10, color='gray', alpha=0.3)
# ---------------------------------------------------------

# 自定义绘图样式
plt.xlim(0, 10)
plt.ylim(0, 10)
plt.yticks(np.arange(0, 10.01, 1))
plt.xticks(np.arange(0, 10.01, 1))
plt.gca().invert_yaxis()
plt.gca().set_aspect('equal', adjustable='box')
plt.grid()

plt.show()

说明

  • alpha=0.3设置填充透明度,兼顾阴影效果和内容可见性。
  • 由于y轴被反转,图中“上方”对应数值更大的y值,因此填充从直线到y=10的区域正好是目标的左上角区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:43:34