python - 在 matplotlib 3D 绘图中使用图像作为背景
问题描述
我正在尝试使用带有 Axes3D 的 matplotlib 来模拟地球绕太阳运行,我认为如果我可以将星空夜空作为背景会很棒。我在网上查了一下,发现了“imshow”,但它似乎不适用于 3D 绘图。有谁知道如何做到这一点?提前致谢 :)
解决方案
您可以尝试按照此处的方法将图像放在所有 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 地球),
得到地球。
推荐阅读
- amazon-web-services - 运行 ng build 后以角度生成的“输出”文件与“dist”文件相同吗?
- c# - c#在IndexOutOfRange中检查循环+中断结果的索引?
- javascript - 将环数组转换为 geoJSON 对象
- rust - 如何使用 Rust nom 获取字符串的最后一次出现?
- android - Room 不更新现有的预定义数据库
- python - 如何将相交的二维列表链(列表列表)合并到单个二维列表列表中
- html - Ionic 5 表单布局 - 如何并排输入和选择
- python - 运行DecisionTreeRegressor算法后如何选择特征?
- python - leetcode 两个数字相加循环
- javascript - 获取 flexbox 中的 xpath 元素