python – 如何在给定纬度和经度列表的情况下在球体上绘制热图?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何在给定纬度和经度列表的情况下在球体上绘制热图?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2060字,纯文字阅读大概需要3分钟。
内容图文
我有一个超过500点的列表,在纬度和经度中给出.这些点代表陨石坑,我想绘制这些陨石坑的热图.例如,我想要一个有很多陨石坑的区域被认为是“热”,而更少的陨石坑被认为是“冷”.我使用SciPy查看了KDE,并尝试在Mathematica中使用ListSliceDensityPlot3D,但我无法创建足够的图形.
我将每个点从纬度/经度转换为笛卡尔[x,y,z]坐标,并将它们绘制在球体的表面上,但我不知道如何获取点列表并计算给定的密度区域,然后将其绘制在3D表面上.
我的想法是获得像this image of Ceres这样的情节!
在此先感谢,如果需要请提问,抱歉,如果我最初没有发布足够的信息.
解决方法:
这是一种蛮力方法,但它可以达到某一点.
如果你使网格非常精细或有数千个陨石坑,那将是有问题的.如果箱子尺寸足够小,表面上的距离和3D距离之间没有很大差异,所以我采用后者,因为它更容易计算,但人们可能想要改变它.
代码如下:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
def random_point( r=1 ):
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
"""
https://stackoverflow.com/questions/22128909/plotting-the-temperature-distribution-on-a-sphere-with-python
"""
pointList = np.array([ random_point( 10.05 ) for i in range( 65 ) ] )
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 )
# create the sphere surface
XX = 10 * np.outer( np.cos( u ), np.sin( v ) )
YY = 10 * np.outer( np.sin( u ), np.sin( v ) )
ZZ = 10 * np.outer( np.ones( np.size( u ) ), np.cos( v ) )
WW = XX.copy()
for i in range( len( XX ) ):
for j in range( len( XX[0] ) ):
x = XX[ i, j ]
y = YY[ i, j ]
z = ZZ[ i, j ]
WW[ i, j ] = near(n p.array( [x, y, z ] ), pointList, 3)
WW = WW / np.amax( WW )
myheatmap = WW
# ~ ax.scatter( *zip( *pointList ), color='#dd00dd' )
ax.plot_surface( XX, YY, ZZ, cstride=1, rstride=1, facecolors=cm.jet( myheatmap ) )
plt.show()
结果如下:
您也可以修改距离函数以考虑火山口大小.
内容总结
以上是互联网集市为您收集整理的python – 如何在给定纬度和经度列表的情况下在球体上绘制热图?全部内容,希望文章能够帮你解决python – 如何在给定纬度和经度列表的情况下在球体上绘制热图?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。