【问题标题】:Plotting Points on a Map in MATLAB在 MATLAB 中的地图上绘制点
【发布时间】:2013-10-17 11:41:14
【问题描述】:

我想在纽约州的地图上绘制不同的位置。我当前的代码绘制了整个北美,因为我找不到如何只绘制一个州。我正在尝试为纽约州设置纬度和经度限制,但它仍然给了我整个国家。

此外,当我执行hold all(或hold on)并尝试绘制点时,我会弹出另一个带有我指定的标题的图形,但只是一个空白的白色方块。

另一个相关的问题是,一旦我绘制了点,我就必须知道它们是什么点。如果我在单独的单元格数组中有名称,我如何让 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)

【问题讨论】:

    标签: matlab map plot


    【解决方案1】:

    您可以使用usamap('New York') 获取美国州地图,并使用textm 绘制覆盖文本。此处,图中绘制了 25 个随机点及其标签。

    下面的情节

    制作
    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)
    

    【讨论】:

    • 你能解释一下你标记点的部分吗?我有一个单元格数组中的名称。
    • 正如文档所说:string 可能是字符串的元胞数组,其元素数量与 lat 和 lon 相同。 (为了向后兼容,string 也可以是一个二维字符数组,使得 size(string,1) 匹配 numel(lat))。如果您在命令窗口中运行num2str((1:nb_point)',您将看到文本的结构。就这么简单!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多