首页 > 解决方案 > 使用 mplot3d 将数据绘制到盒子而不是金字塔中的方式

问题描述

所以我有一个值数组,我试图使用该plot_surface命令绘制。具体来说,我有一个 30x30 数组,中间有一个,其他地方为零。当我绘制它时,这是我得到的:金字塔

但是,我希望将值表示为长方体。那可能吗?

谢谢

编辑:显示该图的代码

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

N=30
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(0, N)
z = np.zeros((N,N))
z[15,15] = 1
X, Y = np.meshgrid(x, y)
ax.plot_surface(X, Y, z, cmap='YlOrBr')
plt.show(block=False)

标签: pythonmatplotlibplot

解决方案


我认为 3D 条形图将提供您正在寻找的内容。

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

N=30
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(0, N)
z_bottom = np.zeros((N,N))
z_top = z_bottom.copy()
z_top[15,15] = 1
X, Y = np.meshgrid(x, y)
ax.bar3d(X.ravel(), Y.ravel(), z_bottom.ravel(), 1, 1, z_top.ravel())
plt.show(block=False)

在此处输入图像描述

如果您想使用颜色等,完整的文档在这里。


推荐阅读