如果我在整个世界地图上绘制图表,它可以工作:
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)
答案 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
等会发生这种情况。我希望此代码在您的应用程序中更有意义,否则只需删除它!
现在解决真正的问题:您想要同时制作Yticks
和scatter
。
但是,这不起作用。 geoshow
中显示的坐标不是纬度和经度,Matlab会自己进行转换以正确绘制它。因此,您无法将geoshow
和scatter
放在一起。您需要geoshow
两者。此外,您永远不会使用geoshow
,因此您永远不会同时看到它们......
您遇到的另一个问题是hold on
和lat
不存在。如果你意识到你作为一个例子编写的3行代码,生成这些变量的是long
,你永远不会加载它。
简而言之,此代码有效:
load coast
道歉,如果我没有一步一步地完成所有这一切。我假设这段代码的大部分没有意义,因为你试图将它简化为一个简单的例子,我很欣赏。如果您对任何细节有任何疑问,请在评论中提问。