Plot 3d bars on a map in Matlab

杀马特。学长 韩版系。学妹 提交于 2019-12-12 16:08:57

问题


I have a Lat/Long vector, and another with Z values that I need to show on a 3d map just like the one on the right of the following figure. I tried bar3 but it's combuersome as it requires creating multiple graphs.

here's some code:

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!! :(

Any ideas on how can I do this? thx!


回答1:


So based in the ability of relocating bar3 wherever you want here there is a simple code that does the job.

Things that does not and may be interesting for you:

1- Fill the map. 2.-Set the ligth 3.-Create the labels

2 and 3, they can be easily done. 1 I dont know.

Result:

CODE:

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


来源:https://stackoverflow.com/questions/29539247/plot-3d-bars-on-a-map-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!