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

Matplotlib保存64×64像素高度图时出现白色阴影边框的解决方法

去除Matplotlib高度图的白色阴影边框

问题描述

尝试用Matplotlib制作64×64像素的简易高度图,保存图像时绘图区域出现带白色阴影的边框,已尝试修改shading参数但无效。

原代码如下:

import matplotlib.pyplot as plt
import numpy as np


data = 0.5*np.ones((100,100))
X,Y = np.linspace(1,100,100),np.linspace(1,100,100)
X,Y = np.meshgrid(X,np.linspace(0,max(abs(X)),100))  

px = 1/plt.rcParams['figure.dpi']  # pixel in inches
res_v = 64 #vertical resolution in pixels
res_h = 64 #horizontal resolution in pixels


fig, ax = plt.subplots(figsize=(res_h*px, res_v*px))
ax.pcolormesh(X,Y,data, cmap='Greys',shading='gouraud',vmax=1,vmin=0)
plt.axis('off')
plt.savefig("gradient.png", bbox_inches='tight',pad_inches=0)

原问题效果:

  • 带白色边框的绘图:带白色边框的绘图
  • 放大后的绘图:放大后的绘图

解决方案

白色边框本质是绘图区域与画布边缘不完全贴合,加上抗锯齿导致的边缘采样虚影,可通过以下步骤解决:

1. 让数据与目标分辨率完全匹配

将data尺寸设为64×64(和目标图像分辨率一致),同时生成对应尺寸的网格,避免缩放带来的边缘误差:

# 生成64x64的均匀数据
data = 0.5 * np.ones((64, 64))
# pcolormesh需要N+1个网格点绘制NxN色块,所以生成0到64的65个点
X, Y = np.meshgrid(np.arange(65), np.arange(65))

2. 关闭抗锯齿并强制坐标轴范围

关闭pcolormesh的抗锯齿,避免边缘模糊;同时严格设置坐标轴范围与网格一致,确保绘图区域填满画布:

# 绘制时关闭抗锯齿
ax.pcolormesh(X, Y, data, cmap='Greys', shading='flat', vmax=1, vmin=0, antialiased=False)
# 强制坐标轴范围与网格边界对齐
ax.set_xlim(0, 64)
ax.set_ylim(0, 64)

3. 优化保存参数

保存时设置画布背景透明,关闭抗锯齿,彻底消除边缘的白色虚影:

plt.savefig("gradient.png", bbox_inches='tight', pad_inches=0, 
            facecolor='none', edgecolor='none', antialiased=False)

完整修改后代码

import matplotlib.pyplot as plt
import numpy as np

# 匹配目标分辨率的64x64数据
data = 0.5 * np.ones((64, 64))
# 生成对应N+1的网格点
X, Y = np.meshgrid(np.arange(65), np.arange(65))

px = 1 / plt.rcParams['figure.dpi']
res_v, res_h = 64, 64

fig, ax = plt.subplots(figsize=(res_h*px, res_v*px), dpi=plt.rcParams['figure.dpi'])
# 关闭抗锯齿,避免边缘模糊
ax.pcolormesh(X, Y, data, cmap='Greys', shading='flat', vmax=1, vmin=0, antialiased=False)
# 严格对齐坐标轴范围
ax.set_xlim(0, 64)
ax.set_ylim(0, 64)
plt.axis('off')
# 优化保存参数,消除白色边框
plt.savefig("gradient.png", bbox_inches='tight', pad_inches=0, 
            facecolor='none', edgecolor='none', antialiased=False)
plt.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:11:13