如何在Matlab中绘制对角直方图

时间:2018-08-06 03:52:39

标签: matlab matlab-figure

给出散点数据或矩阵,我想生成一个漂亮的图,如下图所示,其中包含所有3个直方图和一个彩色矩阵。我对对角直方图特别感兴趣,理想情况下,它应该对应于矩阵的对角线:

www.med.upenn.edu/mulab/jpst.html

原始数据www.med.upenn.edu/mulab/jpst.html

现有命令 scatterhist 不能强大到生成这种类型的图形。有什么想法吗?

谢谢!

编辑

在@Cris Luengo的提示之后,我想到了以下代码,该代码在倾斜的直方图中做了一些初步的工作:进展中的工作(帮助)!

b = [0     1     2     3     4     5     6     7     8     9    10];
h = [0.33477 0.40166 0.20134 0.053451 0.008112 0.000643 2.7e-05 0 0 0  0];
wid = 0.25; bb = sort([b-wid b-wid b+wid b+wid]);
kk = [zeros(numel(h),1) h(:) h(:) zeros(numel(h),1)];
kk = reshape(kk',[1,numel(kk)]);

pp=patch(bb,kk,'b');axis([-.5 5 0 .5])
set(gca,'CameraUpVector',[-1,.08,0]);axis square

enter image description here

编辑2:使用旋转

phi = pi/4;
R = [cos(phi),-sin(phi);sin(phi),cos(phi)];
rr = [bb' kk'] * R;
bb = rr(:,1); kk = rr(:,2);
patch(bb,kk,'b'); axis([-.5 3 -4 .5])

enter image description here

1 个答案:

答案 0 :(得分:0)

这是绘制对角线直方图的方法,如果可以的话,我敢肯定您也可以弄清楚其余部分。

  1. 计算直方图,bin计数为h,bin中心为b

  2. 建立一个坐标矩阵,在直方图左右两端的x轴上附加一个点的坐标:

    coords = [b(:),h(:)];
    coords = [coord;b(end),0;b(1),0];
    
  3. 您现在可以使用patch绘制直方图,如下所示:

    patch(coords(1,:),coords(2,:));
    
  4. 要绘制旋转的直方图,您可以简单地将coords矩阵与旋转矩阵相乘,然后再使用patch

    phi = pi/4;
    R = [cos(phi),-sin(phi);sin(phi),cos(phi)];
    coords = R * coords;
    

您可能需要移动绘图以将其放置在正确的位置其他元素。

我建议您将所有这些图形元素放置在同一轴对象中;您可以将轴的可见性设置为“关闭”,这样它就只能用作其他元素的画布。

要像显示的情节中那样放置所有内容,将需要进行一些工作,但这都不困难。使用低级imagelinepatchtext来放置这些类型的元素,不要尝试使用较高级别的绘图功能,例如{ {1}},在这种情况下,它们没有提供比低级产品更高的任何优势。