Python 生成底图&;使用colorbar在jupyter中的单独单元格中打印
我希望生成一个基础图,然后在此基础图上绘制一些散点图(在jupyter实验室),而不必每次加载新的基础图。但是,我按照中的说明添加颜色贴图时,此解决方案不再有效,每次绘图时都会添加一个新的颜色条 可复制示例: 单元格1Python 生成底图&;使用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
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