如何在MATLAB中的绘图背景中加载worldmap的子区域?

时间:2015-10-14 07:21:47

标签: matlab

如果我在整个世界地图上绘制图表,它可以工作:

scatter(a,b,c,d);
load coast
geoshow(lat, long)

如果我只是尝试绘制世界地图的子区域,那么它也会起作用:

worldmap([21.5 25.5],[120 122.5])
load coast
geoshow(lat, long)

但是,如果我尝试在worldmap的子区域上绘制图形,则它不起作用:

scatter(a,b,c,d);
worldmap([21.5 25.5],[120 122.5])
load coast
geoshow(lat, long)

它只是绘制没有陆地边界的scatterplot,并抛出此错误:

Error using setm>verifyAxesChildren (line 400)
There is data in an hggroup that cannot be reprojected.

Error in setm>setmaxes (line 112)
verifyAxesChildren(ax, oldstruct, varargin{:});

Error in setm (line 50)
            setmaxes(varargin{:});

Error in regionmap>setCommonMapAxesProperties (line 517)
setm(ax, ...

Error in regionmap>constructMapAxesWorld (line 486)
        setCommonMapAxesProperties(ax, ticksize, roundat);

Error in regionmap (line 120)
        h = constructMapAxes(latlim, lonlim, e);

Error in worldmap (line 122)
ax = regionmap(mfilename, varargin);

Error in taiwanHeatmap (line 38)
worldmap([21.5 25.5],[120 122.5])

taiwanHeatmap.m是我的代码文件,我尝试在第38行定义我的子区域。这可能是什么原因,我该如何克服它?谢谢。

修改

这是评论请求的taiwanHeatmap.m文件的完整代码:

taiwan(:,1) = (122.5-120).*rand(10000,1) + 120; 
taiwan(:,2) = (25.5-21.5).*rand(10000,1) + 21.5;

hist3(taiwan); %3D plot
[uniqueLocation, ~, n] = unique(taiwan, 'rows');

% Find number of occurrences
nHist = hist(n, unique(n));
mx = max(nHist);

% Create colors for each number of occurrence
colors = jet(mx);
colormap(colors);

% Construct a color matrix
cMatrix = colors(nHist, :);

% Create scatter plot
a = linspace(10,100,size(uniqueLocation,1));
scatter(uniqueLocation(:, 1), uniqueLocation(:, 2), a, cMatrix, 'filled');
colorbar('YTick', linspace(1/(2*mx), 1-1/(2*mx), mx), 'YTickLabel', 1:mx);

%load the worldmap
worldmap([21.5 25.5],[120 122.5])  %this line is where the error is thrown
geoshow(lat, long)

1 个答案:

答案 0 :(得分:0)

这段代码有点乱,而且关于你想要实际做什么的一点点信息,我只会猜测。我希望能解决代码的主要问题,希望能让你走上正轨。

让我们把代码解释一下。第一部分是好的,但是,除非你打电话给数字,hist3将被下一个情节覆盖,所以要么把它取出来,要么叫figure()

taiwan(:,1) = (122.5-120).*rand(100,1) + 120; 
taiwan(:,2) = (25.5-21.5).*rand(100,1) + 21.5;

figure(1)
hist3(taiwan); %3D plot
[uniqueLocation, ~, n] = unique(taiwan, 'rows');

下一行毫无意义:根据定义,unique的结果将是唯一的(至少对于这些数据)!因此,n将是唯一值,然后下一行将只输出size(n)的{​​{1}}向量。

nHist = hist(n,unique(n));

然后你选择1这意味着mx = max(nHist);将使用此处的数据为1,因此,您再次使用单个值在下一行创建一个色彩映射。

对于颜色,mx等会发生这种情况。我希望此代码在您的应用程序中更有意义,否则只需删除它!

现在解决真正的问题:您想要同时制作Yticksscatter

但是,这不起作用。 geoshow中显示的坐标不是纬度和经度,Matlab会自己进行转换以正确绘制它。因此,您无法将geoshowscatter放在一起。您需要geoshow两者。此外,您永远不会使用geoshow,因此您永远不会同时看到它们......

您遇到的另一个问题是hold onlat不存在。如果你意识到你作为一个例子编写的3行代码,生成这些变量的是long,你永远不会加载它。

简而言之,此代码有效:

load coast

enter image description here

道歉,如果我没有一步一步地完成所有这一切。我假设这段代码的大部分没有意义,因为你试图将它简化为一个简单的例子,我很欣赏。如果您对任何细节有任何疑问,请在评论中提问。