用colorb在jupyter中生成底图并在单独的单元格中打印

2024-05-14 12:37:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望生成一个底图,然后在这个底图上绘制一些散点图(在jupyter实验室),而不必每次都加载一个新的底图。我遵循了this post中的说明,但是当我添加一个颜色映射时,这个解决方案不再有效,每次绘图时都会添加一个新的颜色条

可复制示例:

单元格1

import matplotlib.pyplot as plt
import pandas as pd
from mpl_toolkits.basemap import Basemap

单元格2

# generate sample data
data = pd.DataFrame({'lat':[53.360967, 53.3290910], 'lon':[-6.2298519, -6.311015], 'values':[0.25, 0.8]})

单元格3

# generate the basemap 
%%capture
fig, ax = plt.subplots(figsize=(20,10))
bmap = Basemap(epsg=3857, llcrnrlon=data['lon'][0], llcrnrlat=data['lat'][0],
          urcrnrlon=data['lon'][1], urcrnrlat=data['lat'][1], ax=ax) 
bmap.arcgisimage(service='ESRI_StreetMap_World_2D', xpixels = 12000, verbose= True)

单元格4

# overlay some data on the basemap 
x, y = bmap(list(data['lon']), list(data['lat'])) 
plot = bmap.scatter(x, y, s=200, marker='o', c=data['values'], cmap='bwr')
cbar = fig.colorbar(plot)
cbar.set_label("Label", rotation=270, labelpad=-10, fontsize=20, weight='semibold')
fig

第一次运行cell4时,我得到了预期的绘图:See here

但是,每次运行该单元格时,都会添加一个新的颜色条See here

有没有解决这个问题的办法,还是有更好的办法

编辑:理想情况下,我希望最后有一个生成底图的函数,还有一个绘制到底图的函数,我可以为同一地图上的不同数据多次调用该函数


Tags: 函数import绘图data颜色asfig绘制
1条回答
网友
1楼 · 发布于 2024-05-14 12:37:38

最后终于弄明白了。解决方案是使用matplotlib.cm.ScalarMappable独立于散点图,用底图生成色条

所以单元格3应该是这样的:

%%capture
import matplotlib.cm as cm
fig, ax = plt.subplots(figsize=(20,10))

# generate the colorbar
norm= cm.colors.Normalize(vmin=data['values'].min(), vmax=data['values'].max(), clip=False)
SM = cm.ScalarMappable(norm=norm, cmap='bwr')
SM.set_array([])

# generate the basemap 
bmap = Basemap(epsg=3857, llcrnrlon=data['lon'][0], llcrnrlat=data['lat'][0],
          urcrnrlon=data['lon'][1], urcrnrlat=data['lat'][1], ax=ax) 
bmap.arcgisimage(service='ESRI_StreetMap_World_2D', xpixels = 12000, verbose= True)
cbar = fig.colorbar(SM, ax=ax)
cbar.set_label("Label", rotation=270, labelpad=-10, fontsize=20, weight='semibold')

然后单元格4现在可以按如下方式运行多次

x, y = bmap(list(data['lon']), list(data['lat'])) 
plot = bmap.scatter(x, y, s=200, marker='o', c=data['values'], cmap='bwr')
fig

相关问题 更多 >

    热门问题