使用plt.show()绘制二元函数3D图后弹出的Figure 1窗口空白
解决VSCode中Matplotlib 3D图形空白的问题
问题分析
你的代码存在两个核心问题导致图形空白:
- 3D轴创建方式过时:
Axes3D(figure)的旧写法在部分Matplotlib版本或VSCode环境下存在渲染兼容问题 - Z值包含无效值:当X或Y为0时,
(np.sin(X)*np.sin(Y))/(X*Y)会产生NaN,导致图形渲染异常
修正后的代码
from matplotlib import pyplot as plt import numpy as np figure = plt.figure() # 使用Matplotlib推荐的标准方式创建3D子图 ax = figure.add_subplot(projection='3d') X = np.arange(-10, 10, 0.1) Y = np.arange(-10, 10, 0.1) X, Y = np.meshgrid(X, Y) # 处理NaN值,替换为函数在(0,0)点的极限值1 Z = np.nan_to_num((np.sin(X)*np.sin(Y))/(X*Y), nan=1.0) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') plt.show()
关键修改说明
- 更新3D轴创建方式:
figure.add_subplot(projection='3d')是Matplotlib 3.1+版本官方推荐的写法,兼容性更强 - 修复无效值问题:通过
np.nan_to_num将计算产生的NaN替换为函数的极限值1,确保图形可以完整渲染
若仍有问题,可尝试指定VSCode的Matplotlib渲染后端,在代码开头添加:
plt.switch_backend('TkAgg')
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

