首页 > 解决方案 > 从列表创建 matplotlib 3D 曲面图

问题描述

我想创建代码中显示的列表的曲面图。这是对数据的简化,一旦我弄清楚如何绘制它,我将从 Excel 文件中导入。

x 和 y 应该代表出现 z 值的平面。我创建了一个随机矩阵来与 x,y 中的 3x10 值配对。

这是错误消息:

ValueError:形状不匹配:无法将对象广播到单个形状

import matplotlib.pyplot as plt
import numpy as np


x = [0,1,2,3,4,5,6,7,8,9,10] #creating random data
y = [0,1,2,3]
a = np.random.rand (3, 10)

z = np.array(a, ndmin=2) #not really sure if this piece is necessary. 


fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')

x, y = np.meshgrid(x, y)
ax.plot_surface(x, y, z)
plt.show()

ValueError:形状不匹配:无法将对象广播到单个形状

我已经试着离开z = np.array(a, ndmin=2)了。也没有用。

标签: pythonnumpymatplotlib

解决方案


问题有两个方面:

  • 首先,你有 4x11 点而不是 3x10 点
  • 其次,您需要导入Axes3D以启用 3d 绘图。z = np.array(a, ndmin=2)我认为你不需要额外使用

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

x = [0,1,2,3,4,5,6,7,8,9,10] #creating random data
y = [0,1,2,3]
a = np.random.rand(4, 11)
x, y = np.meshgrid(x, y)

fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')

ax.plot_surface(x, y, a)
plt.show()

在此处输入图像描述


推荐阅读