在美国地图上绘制1000点(遵循特定的概率分布)

时间:2013-06-08 17:49:37

标签: matlab plot

我从mathworks中获得了以下代码,用于绘制美国地图:

 figure; ax = usamap('conus');
    states = shaperead('usastatelo', 'UseGeoCoords', true,...
      'Selector',...
      {@(name) ~any(strcmp(name,{'Alaska','Hawaii'})), 'Name'});
    faceColors = makesymbolspec('Polygon',...
        {'INDEX', [1 numel(states)], 'FaceColor', ... 
        polcmap(numel(states))}); %NOTE - colors are random
    geoshow(ax, states, 'DisplayType', 'polygon', ...
       'SymbolSpec', faceColors)
    framem off; gridm off; mlabel off; plabel off

如果有人可以帮助我,我将不胜感激: 我想在分布在美国的概率分布(现在指数为指数,但可以修改任何其他分布)之后绘制1000点。这些聚类点需要与背景颜色区分开来,并且足够大。此外,我希望能够得到这些点的坐标1000点“(x,y)”用于其他计算。我将不胜感激任何帮助。此外,如果美国代码可以更高效,并且可以包括魁北克加拿大国家,那么也将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您需要创建一组随机坐标,并记住坐标应位于地图的范围(边界)中: 假设你在x方向上的范围是[xmin xmax] 在y方向,它是[ymin ymax]。

应从地图中提取最小值和最大值。 这就是我提取的内容。 1 - 如果您只是使用不良图像:

xmax = 2.354e6;
ymax = 5.478e6;
xmin = -1.984e6;
ymin = 2.674e6;

2-如果您使用map:

 v=[];
 allLat=[v states(:).LabelLat];
 allLon=[v states(:).LabelLon];
 xmin = min(allLon);
 xmax = max(allLon);
 ymin = min(allLat);
 ymax = max(allLat);

然后你应该在区间[a,b]上从均匀分布中生成值。一般形式是这样的:

% r = a + (b-a).*rand(100,1); % don't need to run this line

您可以使用以下命令创建1000个随机分布的点:

X = xmin + (xmax-xmin).*rand(1000,1);
Y = ymin + (ymax-ymin).*rand(1000,1);

现在你有了你随机创建的点,然后简单的部分是绘制点。在此之前,您需要检查该点是否在特定地图内。

function v = checkPoint(x,y) 
b = zeros(size(landareas));
for i = 1:max(size(landareas))
    if x >= landareas(i).BoundingBox(1,1) && x <= landareas(i).BoundingBox(2,1) && y >=       landareas(i).BoundingBox(1,2) && y <= landareas(i).BoundingBox(2,2) 
    b(i) = 1;
end
end
v = ~isempty(find(b==1)) 

(上述功能虽未优化)

所以你使用“checkPoint”函数检查你的点,如果返回值是v = 1,那么你绘制点,否则忽略该点。现在您可以使用以下命令:

plot(X,Y,'oy','MarkerSize',10)

此外,您可以稍后使用X和Y向量进行任何计算。

最后,您可以使用以下代码绘制您喜欢的世界的任何部分:

worldmap({'Canada','Usa'})
land = shaperead('landareas.shp', 'UseGeoCoords', true);
geoshow(land, 'FaceColor', [0.15 0.5 0.15])
cities = shaperead('worldcities', 'UseGeoCoords', true);
geoshow(cities, 'Marker', '.', 'Color', 'red')