我有3个载体的数据,(纬度,长度和污染物浓度)。我想用不同颜色的背景中的英国地图绘制污染物浓度,包括颜色条。 有一个简单的方法吗? 我正在尝试使用geoshow功能,但如何根据浓度改变标记颜色? 请帮助,任何建议将不胜感激。 非常感谢..SSR
这是我的代码
clear all; close all;
S = shaperead('pathtofile/continent.shp'); idom = 2 ;
LAT = ncread('pathtofile/coords.nc','LAT');
coords_LAT = permute(LAT,[2 1]);
LON = ncread('pathtofile/coords.nc','LON');
coords_LON = permute(LON,[2 1]) ;
A = zeros(147,117) ;
%read the filecontaining lat long information
fileID = fopen('pat to file /Urbansites_lat_long.txt','r');
X = cell2mat(textscan(fileID,'%f %f')) ;
X_lat = X(:,1); X_long = X(:,2) ;
if idom==2 %for UKdomain
latlim=[49 60];lonlim=[-11 2];gspace=2;
cellsize=0.05;
end
[Z, refvec] = geoloc2grid(double(coords_LAT),double(coords_LON),A,cellsize);
ax = axesm('mercator','MapLatLimit',latlim,...
'MapLonLimit',lonlim,'Grid','on',...
'MeridianLabel','on','ParallelLabel','on');
set(ax,'Visible','off')
geoshow(Z, refvec, 'DisplayType', 'texturemap');
gridm('MLineLocation',2*gspace,'MLabelLocation',2*gspace,...
'PLineLocation',gspace,'PLabelLocation',gspace)
geoshow(S(3,1).Y, S(3,1).X,'Color',[0 0 0],'Linewidth',1.5);%
mycmap=load('MyColormaps');
colormap(mycmap.mycmap);
% the station locations.
for i = 1:36
h = geoshow(X_lat(i,:),X_long(i,:), 'DisplayType', 'Point', 'Marker',...
'o','Color','r','MarkerEdgeColor', 'r',...
'MarkerFaceColor','r') ;
end
caxis([0 60])
tightmap
57.15736 -2.094278 -24.5380799
53.56292 -1.510436 -4.596925269
52.437165 -1.829999 7.030573015
52.511722 -1.830583 -9.955334856
53.80489 -3.007175 -3.861845799
50.73957 -1.826744 0.947924096
50.840836 -0.147572 9.580096269
答案 0 :(得分:1)
如果你有一个含有浓度值的向量conc
,我认为你可以这样做:
cm = colormap;
for j=1:N
indCol = ceil( size(cm,1) * conc(j) / max(conc) );
if indCol==0 %cannot have index 0
indCol=indCol+1;
end
col = cm(indCol,:);
h = geoshow(X_lat(j),X_long(j), 'DisplayType', 'Point', 'Marker',...
'o','Color',col,'MarkerEdgeColor', 'r',...
'MarkerFaceColor','r') ;
end
要添加颜色栏,您有colorbar
。
修改强>
如果您有负值,这可能是一个解决方案:
%before the for cycle, avoid to have negative values
shift=-min(conc);
conc = conc+shift;
%for cycle
%after the for cycle, rescale the colorbar
caxis([min(conc)-shift max(conc)-shift])
<强> BUT 强>
你还必须擦除'MarkerFaceColor', 'r'
否则无论如何它们都会变红!...
所以.. 使用m_map工具箱和您在此处提供的数据,我获得了:
我的代码
A=[57.15736 -2.094278 -24.5380799;
53.56292 -1.510436 -4.596925269;
52.437165 -1.829999 7.030573015;
52.511722 -1.830583 -9.955334856;
53.80489 -3.007175 -3.861845799;
50.73957 -1.826744 0.947924096;
50.840836 -0.147572 9.580096269];
LAT=A(:,1);
LON=A(:,2);
conc=A(:,3);
latlim=[49 60];
lonlim=[-11 2];
B=zeros(147,117) ;
cellsize=0.05;
figure; hold on;
m_proj('mercator','lon',[lonlim(1) lonlim(2)],'lat',[latlim(1) latlim(2)])
m_grid('fancy')
m_gshhs_h('patch',[.5 .5 .5]);
cm = colormap;
shift=-min(conc);
conc = conc+shift;
for j=1:numel(conc)
indCol = ceil( size(cm,1) * conc(j) / max(conc) );
if indCol==0 %cannot have index 0
indCol=indCol+1;
end
col = cm(indCol,:);
m_plot(LON(j),LAT(j), '.','Color',col,...
'MarkerFaceColor','r');
end
colorbar
caxis([min(conc)-shift max(conc)-shift])
但我真的不认为你需要使用m_map ..只需创建一个与geoshow一起使用的等效代码