首页 > 解决方案 > 如何在 Matlab 中绘制对角直方图

问题描述

给定散点数据或矩阵,我想生成一个漂亮的图,如下图所示,包含所有 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

在此处输入图像描述

编辑 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])

在此处输入图像描述

标签: matlabmatlab-figure

解决方案


这是绘制对角直方图的方法,如果你能做到,我相信你也能弄清楚其余的。

  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放置这些类型的元素,不要尝试使用高级绘图功能,例如plot,在这种情况下,它们不会比低级绘图功能提供任何好处。


推荐阅读