首页 > 解决方案 > 在 matplotlib 3D 绘图中使用图像作为背景

问题描述

我正在尝试使用带有 Axes3D 的 matplotlib 来模拟地球绕太阳运行,我认为如果我可以将星空夜空作为背景会很棒。我在网上查了一下,发现了“imshow”,但它似乎不适用于 3D 绘图。有谁知道如何做到这一点?提前致谢 :)

标签: pythonmatplotlibbackgroundbackground-imagemplot3d

解决方案


您可以尝试按照此处的方法将图像放在所有 6 个方向的背景中(使用 python 的 3d 绘图中的图像叠加),但另一种选择是将设置黑色背景(在 matplotlib 中将 3D 背景更改为黑色)与一些白点(像星星一样,您也可以s随机改变大小和 alpha 以改善效果)。代码是,

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

bm = PIL.Image.open('bluemarble.jpg')
bm = np.array(bm.resize([int(d/5) for d in bm.size]))/256.
lons = np.linspace(-180, 180, bm.shape[1]) * np.pi/180 
lats = np.linspace(-90, 90, bm.shape[0])[::-1] * np.pi/180 

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

x = np.outer(np.cos(lons), np.cos(lats)).T
y = np.outer(np.sin(lons), np.cos(lats)).T
z = np.outer(np.ones(np.size(lons)), np.sin(lats)).T
ax.plot_surface(x, y, z, rstride=4, cstride=4, facecolors = bm)

#Add some stars
x, y, z = 10*(np.random.rand(3,100)-0.5)
ax.scatter(x, y, z, s=0.1, c='w')

#Set backgroudn to black
fig.set_facecolor('black')
ax.set_facecolor('black') 
ax.grid(False) 
ax.w_xaxis.pane.fill = False
ax.w_yaxis.pane.fill = False
ax.w_zaxis.pane.fill = False

plt.show()

如下所示,

在此处输入图像描述

我用这张图片复制了以下示例(创建可旋转的 3D 地球),

在此处输入图像描述

得到地球。


推荐阅读