matlab - 如何在 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])
解决方案
这是绘制对角直方图的方法,如果你能做到,我相信你也能弄清楚其余的。
计算直方图,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
放置这些类型的元素,不要尝试使用高级绘图功能,例如plot
,在这种情况下,它们不会比低级绘图功能提供任何好处。
推荐阅读
- android - 如何选择我在 Android 上使用的麦克风?
- python - 函数中的参数似乎没有效果?
- ios - 跟踪 Alamofire 请求中的进度
- python - 使用 Tensorflow 概率进行非线性优化
- xamarin.forms - 如何在 Xamarin.Forms 中缩放字体和容器的高度
- php - 使用 Symfony 自动装配扩展类的正确方法
- c# - 需要能够从 C#(dotnet-core)代码中获得与 openssl rsautl -sign -inkey 相同的签名
- sql-server - 更新数据库时自动更新 microsoft power bi 报告
- hana - HANA XSJS - InternalError: dberror(Connection.prepareStatement): 608 - 超过准备好的语句的最大数量
- adobe - 在标题栏中显示完整路径(adobe - 括号编辑器)