2

我正在尝试使用 matplotlib 生成 3D 图形,其中 xy 平面是图像,然后在顶部绘制一些 3D 轨迹(该部分工作正常)。问题是,即使我导入的 PNG 使用 imshow 显示得很好,即使我可以在 3D 轴上绘制图像,如果我只使用食谱中的一个示例,我的图像只是显示为一个无特征的黑盒子。我确定我错过了一些小东西 - 在此先感谢!

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D, art3d
from pylab import ogrid
import matplotlib.pyplot as plt

plt.ioff()
fig = plt.figure()
ay=fig.add_subplot(2,1,1)
rawim=plt.imread(r'G:\Path\myimage.png')
ay.imshow(rawim,cmap='gray')
ax=fig.add_subplot(2,1,2,projection='3d')
x,y= ogrid[0:rawim.shape[0],0:rawim.shape[1]]
ax.plot_surface(x,y,0,rstride=5,cstride=5,facecolors=rawim,cmap='gray')
ax.view_init(elev=45, azim=12)
plt.show()

输出是这样的(编辑以包含图像)。 在此处输入图像描述
PS 在 Spyder for Python 2.75 中运行 Matplotlib 1.2.1

编辑添加-我主要是从这篇文章中建模我的方法,所以如果不是

rawim=plt.imread(r'G:\Path\myimage.png')

我用

from matplotlib.cbook import get_sample_data
fn = get_sample_data("lena.png", asfileobj=False)
rawim=read_png(fn)

它完美地工作。我已经尝试了几种 PNG 输出,产生了几种不同的方式,但没有爱。是的,它们是 0-1 之间的灰度。

4

1 回答 1

0

您应该为 facecolors 使用显式颜色数组。您想要具有形状 (Nx, Ny, 4) 的东西,其中“4”维度包含 RGBA 值。另外,去掉 plot_surface 调用中的 cmap='gray' 。

于 2014-03-07T09:28:08.597 回答