2013-10-09 139 views
4

我想绘制纽约州地图上的不同位置。我现在的代码绘制了整个北美,因为我找不到如何绘制一个状态。我试图设置纽约州的经度和纬度限制,但它仍然给我整个国家。此外,当我做hold all(或hold on)并尝试绘制点时,我得到另一个弹出与我指定的标题,但只是一个空白的白色正方形的数字。在MATLAB中的地图上绘制点

另一个相关的问题是,一旦我得到了积分点,我必须知道他们是什么点。如果我在单独的单元格数组中存在名称,那么如何根据哪些坐标(存储在单独列中)与哪个名称(如果名称存储在另一列中)对应,让MATLAB标记点?

%% Plot map 
latlim = [39 47]; 
lonlim = [-81 -70]; 

ax = worldmap('USA'); 
load coast 
geoshow(ax, lat, long,... 
'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30]) 
states = shaperead('usastatelo', 'UseGeoCoords', true, 'BoundingBox', [lonlim' latlim']); 
axesm('lambert', 'MapLatLimit', latlim, 'MapLonLimit', lonlim); 
faceColors = makesymbolspec('Polygon',... 
    {'INDEX', [1 numel(states)], 'FaceColor', ... 
    polcmap(numel(states))}); % NOTE - colors are random 
geoshow(ax, states, 'DisplayType', 'polygon', ... 
    'SymbolSpec', faceColors); 
figure('Color', 'white') 

title('PM2.5 Site in New York State in 2012'); 

hold all 

% Plot points 
axesm('lambert', 'MapLatLimit', latlim', 'MapLonLimit', lonlim'); 
datalat = str2double(datalat); 
datalon = str2double(datalon); 
scatterm(datalat, datalon) 

回答

3

你可以得到一个美国国家地图usamap('New York')textm绘制覆盖文本。这里,图中绘制了25个随机点及其标签。

下面的情节

enter image description here

latlim = [39 47]; 
lonlim = [-81 -70]; 

figure('Color','w'); 
usamap('New York') 
shi = shaperead('usastatehi', 'UseGeoCoords', true,... 
      'Selector',{@(name) strcmpi(name,'New York'), 'Name'}); 
geoshow(shi, 'FaceColor', [0.3 1.0, 0.675]) 
textm(shi.LabelLat, shi.LabelLon, shi.Name, 'HorizontalAlignment', 'center') 

nb_point = 25; 
LAT = latlim(1) + (latlim(2)-latlim(1)).*rand(nb_point,1); 
LON = lonlim(1) + (lonlim(2)-lonlim(1)).*rand(nb_point,1); 
h = geoshow(LAT, LON, 'DisplayType', 'Point', 'Marker', '+', 'Color', 'red'); 
textm(LAT, LON+0.3, num2str((1:nb_point)'), 'FontSize',14) 
+0

产生你能解释一下在你标记点的一部分吗?我有一个单元格阵列中的名称。 – shizishan

+0

正如文档所述:_string可能是一个单元格数组,其元素数与lat和lon相同。 (为了向后兼容,字符串也可以是二维字符数组,使size(string,1)与numel(lat))匹配。如果你在命令窗口中运行'num2str((1:nb_point)'),你会看到文本的结构,就这么简单! – marsei