matplotlib 3D绘图中等高线图投影显示不正确
我在尝试绘制一个随机行走者在三维空间中位置的等高线图,分别在xy平面、xz平面和yz平面上。绘制xy平面时,我得到了一个正常的等高线图,但在xz和平面上却不太对劲,显示出一些奇怪的分布,尤其是在零线附近。请给我一些建议,告诉我该如何解决这个问题。
我是在Jupyter Notebook(Python)中绘制这个图的。下面附上了我的代码片段和我得到的图。如果问题解决了,请提供一个新的图。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
stepsize = 0.5
num_steps = 250
num_trials = 10**3
final_path = []
for _ in range(num_trials+1):
pos = np.array([0.0,0.0,0.0])
for _ in range(num_steps+1):
pos= pos+ np.random.normal(0,0.5,3)
final_path.append(list(pos))
final_path = np.array(final_path)
x = final_path[:,0]
y = final_path[:,1]
z = final_path[:,2]
fig = plt.figure(figsize = (15,12))
ax = fig.add_subplot(projection = '3d', computed_zorder = False)
ax.scatter(x,y,z, c = 'blue', s = 40, zorder = 2)
# ax.plot(x, y, z, 'k-', linewidth=0.5, zorder = 2)
ax.scatter(x,y, zs = min(z), zdir = 'z', color = 'black',s = 8, zorder = 1)
ax.scatter(x,z, zs = max(y), zdir = 'y', color = 'black',s = 8, zorder = 1)
ax.scatter(y,z, zs = min(x), zdir = 'x', color = 'black',s = 8, zorder = 1)
counts_xy, xedges, yedges = np.histogram2d(x, y, bins=25)
x_grid_xy, y_grid_xy = np.meshgrid(np.linspace(min(x), max(x), 25), np.linspace(min(y), max(y), 25))
counts_xz, xedges, zedges = np.histogram2d(x, z, bins=25)
x_grid_xz, z_grid_xz = np.meshgrid(np.linspace(min(x), max(x), 25), np.linspace(min(z), max(z), 25))
counts_yz, yedges, zedges = np.histogram2d(y, z, bins=25)
y_grid_yz, z_grid_yz = np.meshgrid(np.linspace(min(y), max(y), 25), np.linspace(min(z), max(z), 25))
ax.contourf(x_grid_xy, y_grid_xy, counts_xy.T, zdir='z', offset=min(z), levels = 25, cmap='Reds', zorder=0)
ax.contourf(x_grid_xz, z_grid_xz, counts_xz.T, zdir='y', offset=max(y), levels = 25, cmap='Greens', zorder=0)
ax.contourf(y_grid_yz, z_grid_yz, counts_yz.T, zdir='x', offset=min(x), levels = 25, cmap='Blues', zorder=0)
ax.set_xlim(min(x),max(x))
ax.set_ylim(min(y),max(y))
ax.set_zlim(min(z),max(z))
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Walker\'s Position in 3D Space')
plt.show()
这是随机行走者经过1000次试验后的位置信息,以及在xy、xz和yz平面上的等高线投影。
我试着在ChatGPT中寻找解决方案,但也没有成功。我用以下代码行来绘制等高线图,但在这种情况下,xy平面的等高线正常,而xz和yz平面的等高线却如图所示。
counts_xy, xedges, yedges = np.histogram2d(x, y, bins=25)
x_grid_xy, y_grid_xy = np.meshgrid(xedges[:-1], yedges[:-1])
counts_xz, xedges, zedges = np.histogram2d(x, z, bins=25)
x_grid_xz, z_grid_xz = np.meshgrid(xedges[:-1], zedges[:-1])
counts_yz, yedges, zedges = np.histogram2d(y, z, bins=25)
y_grid_yz, z_grid_yz = np.meshgrid(yedges[:-1], zedges[:-1])
ax.contourf(x_grid_xy, y_grid_xy, counts_xy.T, zdir='z', offset=min(z), levels=50, cmap='Reds', zorder=0)
ax.contourf(x_grid_xz, z_grid_xz, counts_xz.T, zdir='y', offset=max(y), levels=50, cmap='Greens', zorder=0)
ax.contourf(y_grid_yz, z_grid_yz, counts_yz.T, zdir='x', offset=min(x), levels=50, cmap='Blues', zorder=0)
0 个回答
暂无回答