簡體   English   中英

如何在具有方位角和仰角的球面上plot一個熱量map以及每個position的對應值

[英]How to plot a heat map on spherical surface having azimuth and elevation and a corresponding value for every position

我有三個值:方位角、仰角和 position 處的錯誤值。從中我有許多這樣的 3 值組合。 所以三個 arrays 的方位角,仰角和相應的誤差。

我想要 plot 一個熱量為 map 的球體,這樣一個區域的顏色將代表該球體區域的誤差。 這將有助於找出球體的哪一部分顯示出最高的錯誤。

我怎么可以plot這個? 我試圖創建一個網格


r = 2
u, v = np.mgrid[0:2.01 * np.pi:(1/10)* np.pi, 0:1.01*np.pi:(1/10)* np.pi]
X = r * np.cos(u) * np.sin(v)
Y = r * np.sin(u) * np.sin(v)
Z = r * np.cos(v)

這將創建一個網格。 如何將每個 position 處的方位角、仰角和誤差整合到這個分區分類中?

你可以這樣做:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [15.00, 6.0]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
r = 2
u, v = np.mgrid[0:2.01 * np.pi:(1/10)* np.pi, 0:1.01*np.pi:(1/10)* np.pi]
X = r * np.cos(u) * np.sin(v)
Y = r * np.sin(u) * np.sin(v)
Z = r * np.cos(v)
ax.plot_surface(X, Y, Z, cmap=plt.cm.YlGnBu_r)
plt.show()

哪個返回:

在此處輸入圖像描述

更新

另一種方式,如果你想引入你想要的點(在這里,我隨機化,但如果你想使用代碼不變,你需要以完全相同的方式格式化你的點),你可以這樣做:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm


def random_point(r=2):
    ct = 2*np.random.rand() - 1
    st = np.sqrt( 1 - ct**2 )
    phi = 2* np.pi *  np.random.rand()
    x = r * st * np.cos( phi)
    y = r * st * np.sin( phi)
    z = r * ct
    return np.array( [x, y, z ] )

def near( p, pntList, d0 ):
    cnt=0
    for pj in pntList:
        dist=np.linalg.norm( p - pj )
        if dist < d0:
            cnt += 1 - dist/d0
    return cnt



Azimuth_points = np.array([ random_point(2.02) for i in range(23) ] )

fig = plt.figure()
ax = fig.add_subplot( 1, 1, 1, projection='3d')

u = np.linspace( 0, 2 * np.pi, 120)
v = np.linspace( 0, np.pi, 60 )
r = 2
X = r * np.outer( np.cos( u ), np.sin( v ) )
Y = r * np.outer( np.sin( u ), np.sin( v ) )
Z = r * np.outer( np.ones( np.size( u ) ), np.cos( v ) )

W = X.copy()
for i in range( len(X) ):
    for j in range( len(X[0]) ):
        x = X[ i, j ]
        y = Y[ i, j ]
        z = Z[ i, j ]
        W[ i, j ] = near(np.array( [x, y, z ] ), Azimuth_points, 3)
W = W / np.amax( W )
myheatmap = W

ax.plot_surface( X, Y,  Z, cstride=1, rstride=1, facecolors=cm.jet( myheatmap ) )
plt.show() 

這使:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM