我有一个2D Numpy矩阵,我想使用matplotlib将其绘制为3D曲面图.

对于X0和Xend之间的每个X以及Y0和Yend之间的Y,我想用等于矩阵[X,Y]的Z值绘制一个点.

我想我可以手动展开矩阵并生成一个由X值组成的数组、一个由Y值组成的数组和一个由Z值组成的一维数组,但这样做似乎既笨拙又低效.

我试过了

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

#plt.matshow(bias_array)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(range(X0,Xend), range(Y0,Yend), bias_array[X0:Xend,Y0:Yend], marker='o')

但这产生了

形状不匹配:对象不能广播到单个形状.形状为(5,)的参数0和形状为(25,)的参数2之间不匹配.

(请注意,在本例中,X和Y范围均为5)

因为matplotlib不知道进入矩阵并 for each 数据点挑选X、Y.

推荐答案

您可以使用np.meshgrid函数.

numpy docs,stackoverflow answer.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)

# Dummy data
X0, Xend = 0, 5
Y0, Yend = 0, 5
bias_array = np.random.rand(10, 10)

# This creates 2D coordinate arrays for X and Y
X, Y = np.meshgrid(range(X0, Xend), range(Y0, Yend))

Z = bias_array[X0:Xend, Y0:Yend]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)

plt.show()

Python相关问答推荐

将每个关键字值对转换为pyspark中的Intramame列

在for循环中保存和删除收件箱

如何在telegram 机器人中发送音频?

仅对matplotlib的条标签中的一个条标签应用不同的格式

使用图片生成PDF Django rest框架

具有症状的分段函数:如何仅针对某些输入值定义函数?

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

无法使用equals_html从网址获取全文

使用polars .滤镜进行切片速度比pandas .loc慢

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

numba jitClass,记录类型为字符串

如何使用html从excel中提取条件格式规则列表?

优化pytorch函数以消除for循环

管道冻结和管道卸载

如何使用pytest来查看Python中是否存在class attribution属性?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

mypy无法推断类型参数.List和Iterable的区别

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

为什么调用函数的值和次数不同,递归在代码中是如何工作的?