matplotlib 如何使用底图在背景顶部绘制散点图

ssgvzors  于 2023-05-18  发布在  其他
关注(0)|答案(3)|浏览(131)

我正在尝试使用底图在背景上绘制散点图。但它掩盖了背景。我如何保留背景?
我正在使用这个代码

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80,llcrnrlon=-180,urcrnrlon=180,lat_ts=20,resolution='c')

m.bluemarble()

x, y = m(list(longitude), list(latitude))
plt.scatter(x,y,1,marker='o',color='Red')
plt.show()

但一旦我运行散点图,它会覆盖背景图像。如何在图像上叠加散点图。

bwleehnv

bwleehnv1#

这是如何在光栅Map上绘制一系列点的方法。请注意,bluemarble图像非常大,因此应避免绘制全比例(1.0或默认值)。代码是基于你的。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# make up some data for scatter plot
lats = np.random.randint(-75, 75, size=20)
lons = np.random.randint(-179, 179, size=20)

fig = plt.gcf()
fig.set_size_inches(8, 6.5)

m = Basemap(projection='merc', \
            llcrnrlat=-80, urcrnrlat=80, \
            llcrnrlon=-180, urcrnrlon=180, \
            lat_ts=20, \
            resolution='c')

m.bluemarble(scale=0.2)   # full scale will be overkill
m.drawcoastlines(color='white', linewidth=0.2)  # add coastlines

x, y = m(lons, lats)  # transform coordinates
plt.scatter(x, y, 10, marker='o', color='Red') 

plt.show()

结果图:

xghobddn

xghobddn2#

我知道这是一个老问题,但万一有人来这里和我一样的问题。
诀窍是为散点图给予比.bluemarble()更高的z阶数。

m.scatter(x, y, 10, marker='o', color='Red', zorder=3)

更多信息:https://matplotlib.org/3.1.0/gallery/misc/zorder_demo.html

6tr1vspr

6tr1vspr3#

我不太明白你说的“覆盖背景”是什么意思。使用plt.scatter()时,它会在Map上绘制点,因此它会在背景上显示点。
只是根据提供的代码,我认为你在这里的问题是m(list(longitude), list(latitude))
如果列表中有多个点,则需要在它们上循环。

lats = [32, 38, 35]
lons = [-98, -79, -94]
x, y = m(lons, lats)

for i in range(len(lats)):
   plt.scatter(x, y, marker = 'o')

如果只有一分,

lat, lon = 32, -92
x, y = m(lon, lat)
plt.scatter(x, y, marker = 'o')

点的样式可以在matplotlib documentation中找到。

相关问题