此处已触及该主题,但未提供有关如何创建3D图并将图像以(x,y)指定z高度插入平面的指示。
因此,为了提出一个简单且可复制的案例,假设我使用以下代码创建了一个3D图mplot3d:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.winter,
linewidth=0, antialiased=True)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
在级别上z=min(z)-1,这里-1是避免重叠的视觉偏移, …
我正在寻找在 3D 图上绘制(可变)数量的填充轮廓的帮助。问题是这些点需要正确地进行地理参考。我已经使用 Cartopy 处理了 2D 案例,但不能简单地使用mpl_toolkits.mplot3d,因为只能将一个投影传递到figure()方法中。
这个问题很有用,但主要集中在绘制 shapefile,而我拥有所有点和每个点的值以用于轮廓绘制。
这个问题看起来也很有希望,但不涉及 3D 轴。
我有一种使用直接的方法mpl_toolkits.mplot3d,但它扭曲了数据,因为它在错误的 CRS 中。我会使用Basemap,但由于某种原因它不能很好地处理 UTM 预测。
虽然它看起来像这样(情节最终没有那么明显,数据形成线性特征,但这应该有助于了解它是如何工作的):
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d Axes3D
the_data = {'grdx': range(0, 100),
'grdy': range(0, 100),
'grdz': [[np.random.rand(100) for ii in range(100)]
for jj in range(100)]}
data_heights = range(0, 300, 50)
fig = plt.figure(figsize=(17, 17))
ax = fig.add_subplot(111, projection='3d')
x = the_data['grdx']
y = the_data['grdy']
ii = 0
for …Run Code Online (Sandbox Code Playgroud)