如何使用底图在背景之上绘制散点图 Python
How to draw Scatter plot on top of background using Basemap Python
我正在尝试使用底图在背景上绘制散点图。但它正在覆盖背景。如何保留背景?
我正在使用此代码
%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()
但是一旦我 运行 散点图,它就会覆盖背景图像。如何在图像上叠加散点图。
我不完全确定 "overwriting the background" 是什么意思。当您使用 plt.scatter()
时,它会在地图上绘制点,因此会在背景上显示点。
根据提供的代码,我认为您的问题是 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。
这是在栅格地图上绘制一系列点的方法。请注意,蓝色大理石图像很大,因此应避免使用全尺寸(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()
结果图:
我意识到这是一个老问题,但万一有人遇到和我一样的问题。
诀窍是为散点图提供比 .bluemarble()
更高的 zorder。
m.scatter(x, y, 10, marker='o', color='Red', zorder=3)
更多信息在这里:https://matplotlib.org/3.1.0/gallery/misc/zorder_demo.html
我正在尝试使用底图在背景上绘制散点图。但它正在覆盖背景。如何保留背景?
我正在使用此代码
%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()
但是一旦我 运行 散点图,它就会覆盖背景图像。如何在图像上叠加散点图。
我不完全确定 "overwriting the background" 是什么意思。当您使用 plt.scatter()
时,它会在地图上绘制点,因此会在背景上显示点。
根据提供的代码,我认为您的问题是 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。
这是在栅格地图上绘制一系列点的方法。请注意,蓝色大理石图像很大,因此应避免使用全尺寸(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()
结果图:
我意识到这是一个老问题,但万一有人遇到和我一样的问题。
诀窍是为散点图提供比 .bluemarble()
更高的 zorder。
m.scatter(x, y, 10, marker='o', color='Red', zorder=3)
更多信息在这里:https://matplotlib.org/3.1.0/gallery/misc/zorder_demo.html