python-3.x - 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 当我不能运行代码时,可以看到我得到的两个图似乎添加图像可能是因为声誉低:(感谢任何和所有帮助。在此先感谢。
解决方案
首先请注意,使用的函数与 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()
推荐阅读
- python-3.x - 为什么我得到'NoneType'类型的参数是不可迭代的
- qt - QML MouseArea:以编程方式将鼠标移动到 MouseArea 后不会触发 onExited
- spring-boot-maven-plugin - Spring Boot Maven 插件和层
- android - Android DownloadManager 在 AVD 中总是挂起
- docker - 带有 Wiremock 的 Docker 容器不会刷新卷中的更改
- c - 你能实现一个新类型作为C中函数的输入吗,cs50
- java - 2Sum, 3Sum, 4Sum ........kSum with HashSet (HashTable) 解决方案
- python - Python-熊猫,np.nan
- c# - 如何从 Powershell 调用 GetInstance
- node.js - 如何通过 express 从服务器上的 post 请求中获取 HTML 数据?