使用Matlab绘制英国的空气污染数据

时间:2016-10-06 14:23:20

标签: matlab

我有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

enter image description here

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

1 个答案:

答案 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一起使用的等效代码