在MATLAB中,如何将2个不同的`histc`结果合并为一个,并生成3D图?

时间:2015-10-04 20:05:25

标签: matlab

在一个histc中,我有纬度数据。在另一个histc中,我有经度数据。我已经分别绘制了这两个图的bar图。现在,我想组合它们并生成一个3D图形,其中x轴是纬度,y轴是经度,z轴是每个纬度 - 经度对出现的频率。

问题在于,在分别绘制纬度和经度的图表时,我分别通过单独的histc来计算各自的频率。但是,当我想让它成为3D情节时,我似乎找不到一种方法来获取纬度 - 经度对的histc

编辑:我正在添加我的代码,用于在一位评论者要求的情况下绘制条形图,但我不知道这会有什么帮助。纬度条形图为:bar(unique(M), histc(M,unique(M))),经度为bar(unique(N), histc(N,unique(N)))。并且M和N是nx1矩阵。 (实际上,它们是一个更大矩阵的2列。但为了简单起见,我避免在这里编写复杂的公式。)

编辑:我认为我正在寻找的可能是通过曲面图surf来解决的。但我不确定。如果是,那么我所面临的问题(以surf发言)可以说是定义Z参数的问题。

1 个答案:

答案 0 :(得分:1)

latitudes=180*(rand(1,10000)-0.5);
longitudes=360*(rand(1,10000)-0.5);

d=[latitudes;longitudes];


minVal_Lat=-90;
maxVal_Lat=90;
minVal_Long=-180;
maxVal_Long=180;
delta=10;

axisLat=minVal_Lat:delta:maxVal_Lat;
axisLong=minVal_Long:delta:maxVal_Long;

nPDF_Lat=length(axisLat);
nPDF_Long=length(axisLong);

PDF=zeros(nPDF_Lat,nPDF_Long);

temp=0;
count_i=1;
count_j=1;

for i=axisLat;

     lowlimit_x=i-delta/2;
     upperlimit_x =i+delta/2;

         for j=axisLong;

            lowlimit_y=j-delta/2;
            upperlimit_y =j+delta/2;
            temp=0;

            for k=1:length(d(1,:)); 

                if lowlimit_x<=d(1,k) & d(1,k)<upperlimit_x
                     if lowlimit_y<=d(2,k) & d(2,k)<upperlimit_y
                         temp=temp+1;
                     else 
                     end
                else
                end
            end

            PDF(count_i,count_j)=temp;
            count_j=count_j+1;
         end
    count_i=count_i+1;
    count_j=1;
end


normFactor=sum(sum(PDF));

PDF=(1/normFactor)*PDF;


randVar_Lat=minVal_Lat:delta:maxVal_Lat;
randVar_Long=minVal_Long:delta:maxVal_Long;

surf(randVar_Lat,randVar_Long,PDF')

如果你想获得带有冲浪图的二维概率密度函数,这些代码就可以了。