在python中创建二维网格

las*_*vec 5 python grid mesh matplotlib

我对编程真的很陌生......

但这是我的问题:

我不能发布图像,但我希望有一个“皇冠”(两个同心圆,半径为 a 我的意思是,从数学上讲真的很容易定义,但我怎样才能用 python 程序做到这一点?

我想到了这样的事情:

def Fm1(X, Y):
    r =r = sqrt(1.*X**2+1.*Y**2)
    cos = 1.*X/r
    sin = 1.*Y/r
    teta = where( sin >= 0. , arccos(cos) , -arccos(cos) )
    teta = where(r == 0. , 0., teta)
    return r, teta


def F(r,teta):                                                                  
    X = r*cos(teta)                                                             
    Y = r*sin(teta)                                                             
    return X,Y
Run Code Online (Sandbox Code Playgroud)

这些只是让您从笛卡尔坐标传递到极坐标的函数,然后:

r=sy.linspace(a,b,N+1) # radius division
t=sy.linspace(0,2.*pi,2**NN) #angle (theta) division
R,T=meshgrid(r,t) #creating a mesh

X,Y = F(R,T)#transform from polar to cartesian

#Plotting :
fig=plt.figure()
ax=fig.add_subplot(111)                                 
ax.plot(X, Y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但结果是:同心多边形。我希望我有 N+1 个等距的圆,从半径 a 到半径 b 和 2**NN 线(原点和给定的角度)。

对不起,我知道这真的是一个微不足道的问题,

谢谢

Geo*_*off 4

在我的回答中,我将使用两个库

import numpy as np
import pylab
Run Code Online (Sandbox Code Playgroud)

我相信这些是您的设置中的常量:

r_a = 0.50
r_b = 0.75
circles = 6  
lines   = 50
origin = (0, 0)
Run Code Online (Sandbox Code Playgroud)

选项 1:直接绘图

首先,画圆圈

for r in np.linspace(r_a, r_b, circles):
    pylab.gca().add_patch(pylab.Circle(origin, radius=r, 
                                       fill=False, color='black'))
Run Code Online (Sandbox Code Playgroud)

然后画线

r_ab = np.array([r_a, r_b])
for theta in np.linspace(0, 2 * np.pi, lines):
    pylab.plot(np.cos(theta) * r_ab,
               np.sin(theta) * r_ab, color='red')
Run Code Online (Sandbox Code Playgroud)

最后显示

pylab.axis('scaled')
pylab.show()
Run Code Online (Sandbox Code Playgroud)

结果:

情节的图像

选项 2:图段:

(导入库并设置常量后,如上所述。)首先,计算点位置

r,t   = np.meshgrid(np.linspace(r_a, r_b, circles),
                    np.linspace(0, 2 * np.pi, lines))
x = r * np.cos(t)
y = r * np.sin(t)
Run Code Online (Sandbox Code Playgroud)

然后绘制圆圈(像你一样)并绘制线条

# Plot circles
pylab.plot(x, y)
# Plot lines (first and last x and y of each theta)
pylab.plot(np.vstack((x[:,0], x[:, -1])),
           np.vstack((y[:,0], y[:, -1])))
Run Code Online (Sandbox Code Playgroud)

最后显示

pylab.axis('scaled')
pylab.show()
Run Code Online (Sandbox Code Playgroud)

结果:

第二选项结果

注意:毕竟,我认为您真正需要的是选项 2 中关于绘制线条的最后一点。我会将所有其他答案保留在这里,供未来的读者使用。