Python Can';t使用matplotlib放大mandelbrot集,它只会切断我尝试缩放的部分

Python Can';t使用matplotlib放大mandelbrot集,它只会切断我尝试缩放的部分,python,numpy,matplotlib,mandelbrot,Python,Numpy,Matplotlib,Mandelbrot,我的代码如下: import numpy as np import matplotlib.pyplot as plt def mandelbrot(c): z = complex(0, 0) for i in range(0, 100): z = z*z+c if abs(z) > 2: return(i) return 100 M = np.zeros([401, 401]) a = np.linspac

我的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def mandelbrot(c):
    z = complex(0, 0)
    for i in range(0, 100):
        z = z*z+c
        if abs(z) > 2:
            return(i)
    return 100

M = np.zeros([401, 401])
a = np.linspace(-2, 2, 401)
b = np.linspace(-2, 2, 401)

for x in a:
    for y in b:
        M[round((x+2)*100),  round((y+2)*100)] = mandelbrot(complex(x, y))


plt.imshow(M, cmap='jet', extent=(-2, -2, 2, 2))
plt.show()
这很好用。下一个分类是改变a和b,以便放大集合的某一部分。我尝试更改a和b,以便: a=np.linspace(-0.5,0.5,401) b=np.linspace(-0.5,0.5,401)

以及改变范围,使范围=(amin,amax,bmin,bmax)

结果如下:

原创的

缩放:


正如您所看到的,它不会放大该部分,而是只剪切其中的一部分并仅显示该部分。这就是我被卡住的地方,因为我找不到一种方法来真正使它变焦。有什么建议吗?

您正在使用数组
a
b
的值作为矩阵
M
的索引。 你想要的是
M[x,y]=mandelbrot(a[x]+i*b[y])

将numpy导入为np
将matplotlib.pyplot作为plt导入
曼德尔布罗特(c):
z=复数(0,0)
对于范围(0,100)内的i:
z=z*z+c
如果abs(z)>2:
回报(一)
返回100
numpts=401
xymin=-.5
xymax=.5
M=np.零([numpts,numpts])
a=np.linspace(xymin,xymax,numpts)
b=np.linspace(xymin,xymax,numpts)
对于范围内的x(numpts):
对于范围内的y(numpts):
M[x,y]=mandelbrot(复数(a[x],b[y]))
plt.imshow(M,cmap='jet',范围=(xymin,xymax,xymin,xymax))
plt.show()

这就给了你正确的结果。

我认为问题出在这一行
M[round((x+2)*100),round((y+2)*100)]=mandelbrot(complex(x,y))
,你没有填充整个
M
,只有它的中心部分回答了你的问题。您使用的是“范围”,而不是设置xlim和ylim。有什么好方法@Enzo?我从我的老师那里得到了那个索引,我不知道该把它改成什么。@KristiFrancis看到我的了吗answer@TomMcLean这不起作用幸运的是,我真的不知道它做了什么,但我基本上只是得到了一个空的图像。非常感谢!我不确定索引部分,因为我的老师提供了它。在将它设置为(x+2)*100之前,它的作用是什么?它只是碰巧被设置为从0到400,因为(-2+2)*100是0,(2+2)*100当然是400。但正如你所看到的,如果任何一个数字发生变化,这显然是失败的。这就是为什么仅仅改变范围并没有达到你想要的效果,它只在索引150到250之间填充了M。