Matplotlib函数的可视化精度发生变化

时间:2019-04-05 18:19:31

标签: python-3.x numpy matplotlib 3d graph-visualization

因此,当我发现某些东西时,我正尝试使用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 代码运行时可以看到我得到的两幅图,原因可能是信誉低下,我似乎无法添加图像:( 感谢您的帮助。

1 个答案:

答案 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()

enter image description here