Python matplotlib在椭圆曲线y^2+x^3+x^2=0上绘制Acnode(孤立点)失败

Python matplotlib fails to draw the Acnode (isolated point) on the Elliptic Curve y^2+x^3+x^2=0

我正在使用下面的代码绘制 ECC 曲线 y^2+x^3+x^2 =0

import numpy as np
import matplotlib.pyplot as plt
import math
def main():
    
    fig = plt.figure()
    ax = fig.add_subplot(111)

    y, x = np.ogrid[-2:2:1000j, -2:2:1000j]
    ax.contour(x.ravel(), y.ravel(), pow(y, 2) + pow(x, 3) + pow(x, 2) , [0],colors='red')

    ax.grid()
    plt.show()

if __name__ == '__main__':
    main()

输出为

然而,预期的图像是这样的

我们可以看到,(0,0)处的孤立点没有画出来。有什么解决这个问题的建议吗?

评论中已经提到,单个点似乎没有显示为轮廓。最好的解决方案是应用程序本身以某种方式指示这些点。也许图书馆允许这样做,但我还没有找到办法,因此在这里展示两个解决方法:

选项 1:

在 (0,0) 处的孤立点可以明确标记:

ax.plot(0, 0, color="red", marker = "o", markersize = 2.5, zorder = 10)

在多个点的情况下,掩码数组是一个不错的选择,here

选项 2:

该图可以围绕 z = 0 略有变化,例如z = 0.0002:

z = pow(y,2) + pow(x, 2) + pow(x, 3)
ax.contour(x.ravel(), y.ravel(), z, [0.0002], colors='red', zorder=10)

这将移动整个情节。或者,可以单独移动孤立点周围的区域(通过在 (0,0) 处的孤立点周围添加一个带有小 x,y 网格的第二个 contour 调用)。这不会改变其余部分。