Matplotlib center plot_surface on axis area
Matplotlib center plot_surface on axis area
我正在尝试创建 3d 曲面图,但结果未与原点对齐:
您可以很容易地在 Z 轴投影上看到它在 X 轴和 Y 轴上有一点偏差。我的数据是一个矩阵,其中前两列是我的 X 和 Y,第三列是我的 Z。这就是我计算值的方式:
bins = np.linspace(0, 1, 1000)
indices = np.digitize(data[:, :2], bins, right=True)
X, Y = np.meshgrid(bins, bins, indexing='ij')
Q = np.zeros_like(X)
C = np.zeros_like(X)
d = data[:, 2]
for idx in range(0, len(indices)):
(i,j) = indices[idx]
Q[i, j] += d[idx]
C[i, j] += 1
C[C == 0] = 1 # avoid division by zero errors
Q /= C
return (X, Y, Q, C)
绘图代码:
fig = plt.figure(figsize=(30, 15))
ax = fig.add_subplot(121, projection='3d')
ax.set_xlim3d(-0.5, 1)
ax.set_ylim3d(0, 1.5)
ax.set_zlim3d(-1.5, 1)
Q = ndi.gaussian_filter(Q, sigma=10)
ax.plot_surface(X, Y, Q, cmap=cm.coolwarm, lw=lw, rstride=rs, cstride=cs, alpha=a, antialiased=True)
ax.contourf(X, Y, Q, zdir='z', offset=-1.5, cmap=cm.coolwarm)
ax.contourf(X, Y, Q, zdir='x', offset=-0.5, cmap=cm.coolwarm)
ax.contourf(X, Y, Q, zdir='y', offset=+1.5, cmap=cm.coolwarm)
我的问题是,我是否遗漏了确保表面与原点对齐的任何计算?谢谢。
表面与原点对齐。但是原点是"hanging in the air"。或者换句话说,底部窗格略低于 contourf 图(约 0.05 个单位),这使得它 看起来 就好像该图未对齐一样。
您可能想看看这个问题:Removing axes margins in 3D plot使用两个答案之一来正确对齐窗格。
我正在尝试创建 3d 曲面图,但结果未与原点对齐:
您可以很容易地在 Z 轴投影上看到它在 X 轴和 Y 轴上有一点偏差。我的数据是一个矩阵,其中前两列是我的 X 和 Y,第三列是我的 Z。这就是我计算值的方式:
bins = np.linspace(0, 1, 1000)
indices = np.digitize(data[:, :2], bins, right=True)
X, Y = np.meshgrid(bins, bins, indexing='ij')
Q = np.zeros_like(X)
C = np.zeros_like(X)
d = data[:, 2]
for idx in range(0, len(indices)):
(i,j) = indices[idx]
Q[i, j] += d[idx]
C[i, j] += 1
C[C == 0] = 1 # avoid division by zero errors
Q /= C
return (X, Y, Q, C)
绘图代码:
fig = plt.figure(figsize=(30, 15))
ax = fig.add_subplot(121, projection='3d')
ax.set_xlim3d(-0.5, 1)
ax.set_ylim3d(0, 1.5)
ax.set_zlim3d(-1.5, 1)
Q = ndi.gaussian_filter(Q, sigma=10)
ax.plot_surface(X, Y, Q, cmap=cm.coolwarm, lw=lw, rstride=rs, cstride=cs, alpha=a, antialiased=True)
ax.contourf(X, Y, Q, zdir='z', offset=-1.5, cmap=cm.coolwarm)
ax.contourf(X, Y, Q, zdir='x', offset=-0.5, cmap=cm.coolwarm)
ax.contourf(X, Y, Q, zdir='y', offset=+1.5, cmap=cm.coolwarm)
我的问题是,我是否遗漏了确保表面与原点对齐的任何计算?谢谢。
表面与原点对齐。但是原点是"hanging in the air"。或者换句话说,底部窗格略低于 contourf 图(约 0.05 个单位),这使得它 看起来 就好像该图未对齐一样。
您可能想看看这个问题:Removing axes margins in 3D plot使用两个答案之一来正确对齐窗格。