给出散点数据或矩阵,我想生成一个漂亮的图,如下图所示,其中包含所有3个直方图和一个彩色矩阵。我对对角直方图特别感兴趣,理想情况下,它应该对应于矩阵的对角线:
原始数据: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])
答案 0 :(得分:0)
这是绘制对角线直方图的方法,如果可以的话,我敢肯定您也可以弄清楚其余部分。
计算直方图,bin计数为h
,bin中心为b
。
建立一个坐标矩阵,在直方图左右两端的x轴上附加一个点的坐标:
coords = [b(:),h(:)];
coords = [coord;b(end),0;b(1),0];
您现在可以使用patch
绘制直方图,如下所示:
patch(coords(1,:),coords(2,:));
要绘制旋转的直方图,您可以简单地将coords
矩阵与旋转矩阵相乘,然后再使用patch
:
phi = pi/4;
R = [cos(phi),-sin(phi);sin(phi),cos(phi)];
coords = R * coords;
您可能需要移动绘图以将其放置在正确的位置其他元素。
我建议您将所有这些图形元素放置在同一轴对象中;您可以将轴的可见性设置为“关闭”,这样它就只能用作其他元素的画布。
要像显示的情节中那样放置所有内容,将需要进行一些工作,但这都不困难。使用低级image
,line
,patch
和text
来放置这些类型的元素,不要尝试使用较高级别的绘图功能,例如{ {1}},在这种情况下,它们没有提供比低级产品更高的任何优势。