首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图把标准的北极星变成一个更优雅的椭圆。

试图把标准的北极星变成一个更优雅的椭圆。
EN

Stack Overflow用户
提问于 2019-07-31 09:50:20
回答 1查看 129关注 0票数 1

我试着想象极地图中环形空间中测量到的压力。问题是,我只有6个测量点,因此图是星形的,而由于液体中的垂直压力,它应该是更椭圆形的。请注意,它不一定是一个圆,因为注入压力左右可以不同。

首先,我尝试用matplotlib的极坐标函数绘制一个图,结果得到了一个星状图。然后,我试图分散数据,但现在我无法在数据点中加入一个椭圆。

代码语言:javascript
复制
loc_deg =(71, 11, 306, 234, 169, 109, 71) #  location of sensors 1, 2, 3, 4, 5, 6, 1 1 is repeated to complete the star/circle
loc_rad = np.radians(loc_deg) # use radians

P = (2.7269999999999999, 3.0019999999999998, 0.39800000000000002, 2.9729999999999999, 2.5099999999999998, 2.5609999999999999, 2.7269999999999999)

fig = plt.figure() 
ax = fig.add_subplot(111,projection = 'polar')

ax.set_ylim(0,10)
ax.set_xticks(loc_rad)

tv = ax.plot(loc_rad, P)# create star
lis = ax.scatter(loc_rad, P, color = '#ff7f00', marker = '.') # create scatter

现在我试图通过散点图来拟合一个椭圆,否则恒星就会在椭圆中发生变化。

编辑 这是包括Ardweaden提出的解决方案在内的三种解决方案的一个图解。

在尝试Ardweadens的解决方案时,我意识到,我所寻找的并不完全是一个合适的问题,因此我的问题并不明确。我正在寻找一种方法来连接在极地表面上的点,而不是一条直线。

例如:如果一个人有两个测量点:1点对1度,1点对179度,而这两种测量值都是10。通过使用绘图函数,一条直线将在90度处显示几乎为0的值,而在10到10之间进行插值时,你也会认为该值也是10。所以更像是半圆。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 13:18:51

只是装了个椭圆。

代码语言:javascript
复制
from scipy.optimize import curve_fit

def ellipse(phi,b,e,f):
    return b/(np.sqrt(1 - e * np.cos(phi + f)**2))

popt, pcov = curve_fit(ellipse, loc_rad, P)
x = np.arange(0,2*np.pi,0.01)

ax = fig.add_subplot(111,projection = 'polar')
ax.plot(x,ellipse(x,popt[0],popt[1],popt[2]))

对数据进行硬编码并绘制渐变:

代码语言:javascript
复制
loc_deg =(306, 234, 169, 109,71,11) #  location of sensors 1, 2, 3, 4, 5, 6, 1 1 is repeated to complete the star/circle
loc_rad = np.radians(loc_deg) # use radians

P = (0.39800000000000002, 2.9729999999999999, 2.5099999999999998, 2.5609999999999999,3.0019999999999998,2.7269999999999999)

fig = plt.figure() 
ax = fig.add_subplot(111,projection = 'polar')

ax.set_ylim(0,10)
ax.set_xticks(loc_rad)

def generate_fit(deg,P,deg_f=1):
    x,y = [],[]

    for i in range(1,len(P)):
        x.extend(np.arange(deg[i-1],deg[i],-1))
        incy = abs(deg[i]-deg[i-1])
        y.extend(np.linspace(P[i-1],P[i],incy))

    x.extend(np.arange(11,0,-1))
    x.extend(np.arange(360,306,-1))
    y.extend(np.linspace(P[-1],P[0],360-306 + 11))
    return np.radians(x),y

x,y = generate_fit(loc_deg,P)
ax.plot(x,y)

ax.scatter(loc_rad, P, color = '#ff7f00', marker = '.')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57287948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档