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

自定义函数绘制分段3D图形,解决Matplotlib z需为2D数组报错问题

问题解决方法

报错的核心原因是你传入contour3D的z值不是要求的二维数组,问题出在封装的函数逻辑错误:

  • 自定义的fun函数没有返回有效的二维数组,甚至内部把函数名作为变量覆盖,执行完没有有效返回值
  • 给定的单值计算func函数需要配合二维坐标遍历,才能生成符合要求的z矩阵

修改后的完整可运行代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 导入给定的func函数,仅去掉返回值外层多余的列表包裹,保留核心计算逻辑
def func(x,y):
    if x < 0:
        return np.sin(x+y)
    elif x > 0:
        return np.cos(x+y)
    else:
        return 0

# 生成x、y坐标数组
x = np.linspace(-1, 1, 21)
y = np.linspace(-1, 1, 21)

# 封装逻辑生成符合绘图要求的二维z数组
def generate_z(x_arr, y_arr):
    z = []
    for i in x_arr:
        row_z = []
        for j in y_arr:
            row_z.append(func(i, j))
        z.append(row_z)
    return np.array(z)

# 3D绘图逻辑
fig = plt.figure(figsize=(5, 6))
ax = fig.add_subplot(111, projection='3d')
z = generate_z(x, y)
ax.contour3D(x, y, z, 10, cmap='inferno')
plt.show()

关键修改说明

  • 保留了给定的func单值计算逻辑,仅去掉返回值外层多余的列表,避免生成嵌套结构
  • 单独封装generate_z函数遍历x、y数组,调用func计算每个坐标点的z值,最终返回标准二维numpy数组,匹配绘图接口要求
  • 修复了原代码plt.show缺少括号的问题,避免绘图无法正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:09