matlab里用worldmap画图,能否添加2个ax,并让第二个ax背景透明,只显示数据?

如图想画一个这样的图,用worldmap作为map_axes,底图是ax1=worldmap里画的,而散点图想在ax2=worldmap里画,最后想让ax2的背景变成透明的,只显示数据,数据叠加在底图上。但是尝试了各种将ax2底图变成透明的办法,都不管用,期望大家能帮我解答一下这个问题,具体代码如下:

clc
clear
%——————————————————————————————尝试worldmap坐标系——————————————————————
%底图的nc数据导入——————————————————————————————————————————————————————————————————————
T2M=ncread('g4.timeAvgMap.M2SDNXSLV_5_12_4_T2MMEAN.2008071620080731.112E_35N_130W_89N.nc'M2SDNXSLV_5_12_4_T2MMEAN');
lat1=ncread('g4.timeAvgMap.M2SDNXSLV_5_12_4_T2MMEAN.2008071620080731.112E_35N_130W_89N.n,'lat');
lon1=ncread('g4.timeAvgMap.M2SDNXSLV_5_12_4_T2MMEAN.20080716-20080731.112E_35N_130W_89N.nc','lon');
[M,N]=size(T2M);
lat2=lat1';
lat2=repmat(lat2,M,1);
lon2=repmat(lon1,1,N);
%底图上面散点图的经纬度数据导入————————————————————————————————————————————————————
data=xlsread('graphrty1.xlsx');
lat0=data(:,1);
lon0=data(:,2);
msa=data(:,3);

%开始画图——————————————————————————————————————————————————————————————————————————
figure
clf
set(gcf,'units','pixels','position',[100,100, 800, 600]); % 设置画布大小
ax1=worldmap([35 89],[112 -150]); %载入范围
setm(ax1, 'Origin', [0 180 0]);%更改经度,从0到180再到0
load coast; %载入海岸线
plotm(lat,long);%经纬度
land = shaperead('landareas', 'UseGeoCoords', true);%陆地
%画底图
layer1=geoshow(ax1,lat2,lon2,T2M,'DisplayType', 'texturemap');
%陆地扣掉
geoshow('landareas.shp', 'FaceColor', 'white');
hcb = colorbar;
set(get(hcb,'Xlabel'),'String','CHINARE2008-T2M (K)')


ax2 = worldmap([35 89],[112 -150]); %载入范围
setm(ax2, 'Origin', [0 180 0]);%更改经度,从0到180再到0
scatterm(ax2,lat0,lon0,5,msa);
c = colorbar;
set(c,'location','southoutside') % 将colorbar放在最下面

————————————————————————ax2背景变成透明的尝试————————————————
%ax2.Color = 'none';
%set(ax2,'color','none') %将第二图层背景设为透明,只显示散点
%setm(ax2,'Color','none');
%set(ax2,'FaceColor','none')
set(ax2,'Color','none')

 

参考GPT和自己的思路:

您好,如果想要让第二个ax的背景变成透明,可以使用setm函数设置Colormap来实现。具体的修改代码如下所示:

ax2 = worldmap([35 89],[112 -150]); %载入范围
setm(ax2, 'Origin', [0 180 0]);%更改经度,从0到180再到0
scatterm(ax2,lat0,lon0,5,msa);
c = colorbar;
set(c,'location','southoutside') % 将colorbar放在最下面
setm(ax2,'Frame','off'); % 关闭坐标轴

%修改ax2的Colormap
ax2.Colormap=[]; %清空Colormap 
ax2.Position=[ax1.Position(1) ax1.Position(2) ax1.Position(3) ax1.Position(4)]; %设置ax2位置与ax1相同
ax2.XTickLabel={}; %关掉刻度标签
ax2.YTickLabel={};
ax2.XGrid='off'; %关掉网格线
ax2.YGrid='off';

%在ax1上画出ax2的底图
layer2=copyobj(layer1, ax1);
set(layer2,'AlphaData',0.5); %设置透明度

上述代码中,我们首先使用setm函数关闭了ax2的坐标轴和网格线,并清空了Colormap。之后,我们使用copyobj函数将ax1上的底图复制到ax2上,然后设置layer2的AlphaData为0.5,即可实现ax2的底图为透明状态。最后,我们设置ax2的位置与ax1相同,并关闭刻度标签。

希望这个答案能够帮到您,如果还有什么问题,请随时向我提问。