pandas 如何从列表中绘制坐标,使其与世界Map对齐?

eqqqjvef  于 2023-04-28  发布在  其他
关注(0)|答案(1)|浏览(88)

我正在做一个学校项目,我们选择了一个数据集,并使用Python分析/呈现它。我选择了一个关于火山喷发的数据集,作为我项目的一部分,我想在Map上绘制所有火山喷发沿着构造板块边界,以显示它们如何相互关联。我目前的方法一直是找到一个组成板块边界的坐标列表,并尝试使用所示的方法将它们标绘在Map上here,但它似乎不太适用于我拥有的坐标量,以及与教程中的相比,我的Map缩小程度。我的坐标与Map不一致,并且它们似乎在y方向上稍微“拉伸”
x1c 0d1x和this是我的.csv文件的来源

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


long = []
lat = []

dtf = open("tp.csv", "r")
lines = dtf.readlines()

for row in lines[1:]:
    vals = row.strip().split(",")
    long.append(vals[2])
    lat.append(vals[1])



while("" in long):
    long.remove("")

while("" in lat):
    lat.remove("")

for i in range(0, len(long)):
    long[i]=float(long[i])

for i in range(0, len(lat)):
    lat[i]=float(lat[i])



longvu = []
latvu = []

dtf = open("vulkanutbrudd kordinater.csv")
lines = dtf.readlines()

for row in lines[0:]:
    vals = row.strip().split(";")
    longvu.append(vals[1])
    latvu.append(vals[0])



while("" in longvu):
    long.remove("")

while("" in latvu):
   lat.remove("")

for i in range(0, len(longvu)):
    longvu[i]=float(longvu[i])

for i in range(0, len(latvu)):
    latvu[i]=float(latvu[i])

long.insert(0,-180)
long.insert(1,180)
lat.insert(0,-90)
lat.insert(1,90 )


BBox = [min(long), max(long), min(lat), max(lat)]

kart = plt.imread("map.png")

fig, ax = plt.subplots(figsize = (8,7))
ax.scatter(long, lat, zorder=1, alpha= 0.2, c='b', s=1)
ax.set_xlim(BBox[0],BBox[1])
ax.set_ylim(BBox[2],BBox[3])
ax.set_xlim(-180.00, 180.00)
ax.set_ylim(-90.00,90.00)

ax.imshow(kart,zorder=0, extent = BBox, aspect= 'auto')

plt.show()

dtf.close()

以上是我写的代码到目前为止。“vulkanutbrudd”是火山爆发和longvu和latvu是我还没有得到使用的火山爆发的坐标。im开放使用工具,除了python以及

z0qdvdin

z0qdvdin1#

如果你还在寻找python-package...看看EOmaps
您可以像这样绘制数据点:

import numpy as np
from eomaps import Maps

vals, long, lat = (np.random.randint(-90, 90, 100) for i in range(3))

m = Maps()
m.add_feature.preset.coastline()
m.add_feature.preset.ocean()

m.set_data(vals, long, lat, crs=4326)

m.set_shape.ellipses(radius=2) # for up to ~200 000 points you can use
# m.set_shape.shade_points()   # for more datapoints, use shading...

m.plot_map()

m.cb.pick.attach.annotate()

相关问题