在Matlab中将3D条形图绘制在地图上

3
我有一个经纬度向量和另一个带有Z值的向量,需要在3D地图上显示,就像下图右边的那个一样。我尝试使用bar3,但它很麻烦,因为需要创建多个图形。
以下是一些代码:
S4 = shaperead(filename)    
plot([S4.X],[S4.Y],'k'); % plots the map from a shapefile I loaded previously
XX = [-50 -51 ...];
YY = [-1 -2 ...];
ZZ = [ 2.2 3.2 ... ];
stem3(XX,YY,ZZ) % this is an option, but doesn't look good!! :(

有什么想法可以帮我完成这个吗? 谢谢! 输入图片描述

使用这里的技巧:https://dev59.com/0V4b5IYBdhLWcg3wiSLV#28992462,您应该能够将条形图定位在所需位置。如果您发布一些示例数据,我可能会回答它。 - Ander Biguri
非常感谢您的评论。不过,那个条目似乎是在一个网格化的X,Y矩阵上? - Oliver Amundsen
问题:您打算如何绘制地图?您能向我展示一些代码,让我可以从那里开始工作吗?您已经知道要使用哪些地图或类似的东西吗?对于这个例子来说,很难概括数据,特别是因为有很多方法可能不适合您的需要。 - Ander Biguri
我刚刚添加了代码...谢谢 - Oliver Amundsen
看起来很有前途。我们可以看到实际的形状吗? - Ander Biguri
1
无法分享具体的shapefile,但它类似于此处的任何administrative_0 shapefile:http://www.diva-gis.org/gdata - Oliver Amundsen
1个回答

2

因为你可以将 bar3 移动到任何想要的位置,所以这里有一个简单的代码可以胜任。

以下是一些可能会对您产生兴趣的内容:

1- 填充地图。 2.- 设置灯光 3.- 创建标签

第二和第三个可以很容易地完成。第一个我不知道。

结果:

enter image description here

代码:

clear;clc;

S = shaperead('usastatehi.shp')
S(2)=[]; % Delete Alaska
S(10)=[];% Delete Haway
hold on
plot([S.X],[S.Y],'k'); % plots the map from a shapefile I loaded previously
% syntetic data
 Y=[40,45,25];
 X=[-100,-85,-80];
 Z=[0.5 2.3 1.4];

 cmap=colormap(strcat('parula(',num2str(length(Z)),')')); % Create a colormap. Change parula for anything you preffer

 ar=abs(diff(ylim))/abs(diff(xlim));
 for ii=1:length(X)
    h=bar3(Z(ii));
    Xaux=get(h,'Xdata');
    Xaux=Xaux-1+X(ii);
    set(h,'Xdata',Xaux)


    Yaux=get(h,'Ydata');
    Yaux=Yaux-1+Y(ii);
    set(h,'Ydata',Yaux)

    set(h,'FaceColor',cmap(ii,:));

 end
 axis off

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接