Python 生成底图&;使用colorbar在jupyter中的单独单元格中打印

Python 生成底图&;使用colorbar在jupyter中的单独单元格中打印,python,matplotlib,plot,jupyter-notebook,matplotlib-basemap,Python,Matplotlib,Plot,Jupyter Notebook,Matplotlib Basemap,我希望生成一个基础图,然后在此基础图上绘制一些散点图(在jupyter实验室),而不必每次加载新的基础图。但是,我按照中的说明添加颜色贴图时,此解决方案不再有效,每次绘图时都会添加一个新的颜色条 可复制示例: 单元格1 import matplotlib.pyplot as plt import pandas as pd from mpl_toolkits.basemap import Basemap 单元格2 # generate sample data data = pd.DataFram

我希望生成一个基础图,然后在此基础图上绘制一些散点图(在jupyter实验室),而不必每次加载新的基础图。但是,我按照中的说明添加颜色贴图时,此解决方案不再有效,每次绘图时都会添加一个新的颜色条

可复制示例:

单元格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
第一次运行单元格4时,我获得了预期的绘图:

但是,以后每次运行该单元格时,都会添加一个新的颜色栏

是否有解决方案或更好的方法


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

最终设法解决了这个问题。解决方案是使用
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