首页 > 解决方案 > Matplotlib 函数可视化随着精度的变化而变化

问题描述

因此,当我注意到某些事情时,我试图使用 matplotlib 在 3d 中绘制一些数学函数......当我试图解决之前遇到一些“缺失表面”的问题时,3d 图突然改变(更像是坏掉了) -情节中的差距。主要问题是——由于 Axes3d 的某些固有计算限制或其他原因,3d 图是否没有显示更高精度的两个峰值?还有一个次要问题——为什么在较低精度的图中我会在 +1.25 和 -1.25 附近遇到“缺失表面”?

我已经尝试在谷歌上搜索它并引用了一些帖子,但除了更多问题之外什么都没有。

    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 当我不能运行代码时,可以看到我得到的两个图似乎添加图像可能是因为声誉低:(感谢任何和所有帮助。在此先感谢。

标签: python-3.xnumpymatplotlib3dgraph-visualization

解决方案


首先请注意,使用的函数与 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()

在此处输入图像描述


推荐阅读