因此,当我发现某些东西时,我正尝试使用matplotlib绘制3d中的一些数学函数...当我尝试修复先前遇到的某些“缺失表面”问题时,3d图突然改变(更像是断裂) '-情节中的差距。主要问题是-由于Axes3d的某些固有计算限制或其他原因,3d图是否未以较高的精度显示两个峰?另一个要问的问题-为什么在较低精度图中+1.25和-1.25附近会遇到“缺失表面”?
我已经尝试过使用Google搜索,并推荐了几篇文章,但是除了更多问题之外,什么都没有。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
X=np.arange(-2,+2,0.025)
## Use np.arange(-5,+5,0.25) to experience the 'surface loss' I mention but otherwise correct 2 spike plot at each of (0,-1) and (0,+1) for both X and Y
Y=np.arange(-2,+2,0.025)
X,Y=np.meshgrid(X,Y)
R=1+X**2-Y**2
S=R**2+4*(X**2)*(Y**2)
Z=R/S
fig=plt.figure()
ax=Axes3D(fig)
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=cm.viridis,norm=mpl.colors.Normalize(vmin=-1.,vmax=1.))
##NORMALIZE Was essential to get the proper color range
plt.show()
plt.savefig('art3d.jpeg',bbox_inches='tight')
plt.savefig('art3d.svg',bbox_inches='tight')
理想的结果应该是这样的(显示函数和情节) https://i.stack.imgur.com/kVnYc.png 代码运行时可以看到我得到的两幅图,原因可能是信誉低下,我似乎无法添加图像:( 感谢您的帮助。
答案 0 :(得分:1)
首先请注意,所使用的功能不同于Wolfram alpha输出。因此,让我们使用屏幕截图中显示的功能。然后,您可以将数据限制在要显示的范围内。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
X = np.arange(-2,+2,0.025)
Y=np.arange(-2,+2,0.025)
X,Y=np.meshgrid(X,Y)
Z = -2*X*Y / ((2*X*Y)**2 + (X**2 - Y**2 + 1)**2)
Z[(Z < -1)] = -1
Z[(Z > 1)] = 1
fig=plt.figure()
ax=Axes3D(fig)
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=cm.viridis,norm=mpl.colors.Normalize(vmin=-1.,vmax=1.))
plt.show()