[英]How to plot a Diagonal Histogram in Matlab
給定散射數據或矩陣,我想生成一個很好的圖,如下圖所示,包含所有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])
這是繪制對角線直方圖的一個方法,如果你能做到這一點,我相信你也可以弄清楚其余部分。
計算直方圖,箱數是h
,箱中心是b
。
構建坐標矩陣,在直方圖的左端和右端附加x軸上的點的坐標:
coords = [b(:),h(:)]; coords = [coord;b(end),0;b(1),0];
使用patch
您現在可以繪制直方圖,如下所示:
patch(coords(1,:),coords(2,:));
要繪制旋轉直方圖,您可以在使用patch
之前簡單地將coords
矩陣與旋轉矩陣相乘:
phi = pi/4; R = [cos(phi),-sin(phi);sin(phi),cos(phi)]; coords = R * coords;
您可能需要移動繪圖以將其放置在其他元素的正確位置。
我建議您將所有這些圖形元素放在同一個軸對象中; 您可以將軸的可見性設置為“關閉”,以便它僅作為其他元素的畫布。
將所有內容放置在您顯示的圖中將會有一些工作,但這些都不困難。 使用低級image
, line
, patch
text
本來放置這些類型的元素,不要嘗試使用更高級別的繪圖功能,例如plot
,它們不會提供任何優於其中的低級繪圖功能案件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.