使用mplot3d绘制2d数组

Fou*_*ier 12 python arrays 2d mplot3d

我有一个2D numpy数组,我想用3D绘制它.我听说过mplot3d,但我无法正常工作

这是我想要做的一个例子.我有一个尺寸为(256,1024)的数组.它应该绘制一个3D图形,其中x轴从0到256 y轴从0到1024,图形的z轴显示每个条目的数组值.

我该怎么做?

Chr*_*ris 17

听起来你正在尝试创建一个曲面图(或者你可以绘制一个线框图或一个填充的countour图.

根据问题中的信息,您可以尝试以下方面的内容:

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

# Set up grid and test data
nx, ny = 256, 1024
x = range(nx)
y = range(ny)

data = numpy.random.random((nx, ny))

hf = plt.figure()
ha = hf.add_subplot(111, projection='3d')

X, Y = numpy.meshgrid(x, y)  # `plot_surface` expects `x` and `y` data to be 2D
ha.plot_surface(X, Y, data)

plt.show()
Run Code Online (Sandbox Code Playgroud)

显然,您需要选择比使用更合理的数据numpy.random才能获得合理的表面.

  • @Chris在Python 3.6中执行代码会导致错误"b = np.broadcast(*args [:32])ValueError:形状不匹配:对象无法广播到单个形状" (6认同)
  • 您的二维数组在上面的代码中简称为“data”,其大小称为“nx”、“ny”。希望这能让你继续前进。 (2认同)
  • @Karlo 我不确定这个答案对哪个版本的 Python 有效,因此我不会编辑你的答案。但是对于那些至少使用 Python 3.6 的人.. 将 plot_surface 命令更改为:`ha.plot_surface(XT, YT, data)` 然后你会得到一个正确的结果 (2认同)

Eri*_*got 2

您可以在Matplotlib 库的示例之一中找到答案;3D 示例即将结束。

更一般地说,Matplotlib 库是一个很好的第一站资源,用于查找如何绘制一些图。

我查看的示例本质上适用于三个2D 数组:一个包含所有 x 值,一个包含所有 y 值,最后一个包含所有 z 值。因此,一种解决方案是创建 x 和 y 值的数组(meshgrid()例如,使用 )。