0

使用以下代码网格无法正确显示,因为从图中可以看出,xy 平面中的正方形与 z 轴相比具有较大的尺寸。如何获得相等框的网格?当我不应用 x 和 yticks 时,我观察到网格正方形是相等的。我可以修复这个错误吗?

fig = plt.figure()
ax = fig.add_subplot(111)
x= np.linspace(-math.pi,math.pi,30)
y= np.linspace(-math.pi,math.pi,30)
xx,yy = np.meshgrid(x,y)

X_grid, Y_grid = np.meshgrid(x,y)
print("X_grid shape: ",X_grid.shape)
zz =-2*(np.cos(xx) + np.cos(yy))

ax = plt.axes(projection='3d')

ax.plot_surface(xx,yy,zz)

plt.xticks([x[0],x[int(len(s)/2)], x[-1]], [r'$-\pi$',  r'$0$', r'$-\pi$' ])
plt.yticks([y[0],y[int(len(s)/2)], y[-1]], [r'$-\pi$',  r'$0$', r'$-\pi$' ])
plt.xlabel("kx")
plt.ylabel("ky")

在此处输入图像描述

4

1 回答 1

0

参考我发现的文档:

注意:在 1.0.0 版本之前,创建 3D 轴的方法有所不同。对于使用旧版本 matplotlib 的用户,请将 ax = fig.add_subplot(111, projection='3d') 更改为 ax = Axes3D(fig)。

看到这个.set_zticks。请注意,由于这是 3D 图,因此该文档位于mplot3d

所以相应地修改了代码。

import pandas as pd 
import numpy as np 
import math
import os
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111)
x= np.linspace(-math.pi,math.pi,30)
y= np.linspace(-math.pi,math.pi,30)
z= np.linspace(-math.pi,math.pi,30)

xx,yy = np.meshgrid(x,y)

X_grid, Y_grid = np.meshgrid(x,y)
print("X_grid shape: ",X_grid.shape)
zz =-2*(np.cos(X_grid) + np.cos(Y_grid))

Z = zz.reshape(X_grid.shape)

ax = Axes3D(fig)

#updated lines
ax.set_zticks([z[0],z[int(len(z)/2)], z[-1]])
ax.set_zticklabels([r'$-\pi$',  r'$0$', r'$-\pi$' ])

plt.xticks([x[0],x[int(len(x)/2)], x[-1]], [r'$-\pi$',  r'$0$', r'$-\pi$' ])
plt.yticks([y[0],y[int(len(y)/2)], y[-1]], [r'$-\pi$',  r'$0$', r'$-\pi$' ])

plt.xlabel("kx")
plt.ylabel("ky")    
ax.plot_surface(X_grid,Y_grid,Z)
于 2019-08-05T05:16:43.890 回答