如何在plotmatrix中使用“hold on”?
23次浏览(过去30天)
显示旧的注释
我目前正在尝试运行多个模拟,并通过“坚持”将来自模拟的采样概率密度函数的所有图相互叠加在同一个图形上。对于直方图函数,如果我绘制一个变量,这似乎是可行的,但如果我绘制多个变量来显示边际分布和联合分布,我想使用plotmatrix。然而,它看起来像plotmatrix和“hold on”并不完全兼容,并且不会产生与使用直方图“hold on”相同的结果。
我这样做的代码格式大致如下(为通用性而简化):
N = 1;
而N <= 5
样本= my_function(参数);
图(1)
直方图(样本)
持有在
结束
我想做的很简单:
plotmatrix(样本)
持有在
当我想绘制多个变量时不用直方图。但我试着用plotmatrix来表示一个变量,以为它会做和直方图一样的事情,但它没有——这些图根本没有叠加,而是相互替换。
实现我想做的事情的正确方法是什么?
接受的答案
戴夫B
2021年8月20日
编辑:戴夫B
2021年8月20日
Plotmatrix,因为它使用了多个轴,所以在hold on时工作得并不好…正如你所发现的。
我可以想到三个解决方案:万博 尤文图斯
- 的gplotmatrix统计和机器学习工具箱中的函数面向具有多个组的plot矩阵。这将需要重新组织你的数据(即把所有的集合放到一个矩阵中,并用分组变量标记哪个是哪个)。这可能是最简单的方法(如果你有工具箱的话)
- 一种解决这个问题的方法是在一个新的图形中创建第二个plot矩阵,然后将元素移动到旧的图形中。这里有几个额外的步骤来调整界限和获得单独的颜色。(下面两个数据集的例子)
- 我想,如果是我,我会忍不住编写自己的迷你plotmatrix代码来处理这些数据……但这有点复杂。实际上,plotmatrix只是一堆散点和直方图,它是很久以前写的tiledlayout而且nexttile这使得做布局工作明显更容易。但即使是写一个简单的图表也是一项事业!
x1 = abs (randn (1000 4));
x2 = abs (randn (1000 4));
[a, b, c, d, e) = plotmatrix (x1);
ftemp =图(“可见”,“关闭”);
[a2、b2, c2, d2, e2) = plotmatrix (x2);
为I = 1:数字(a2)
a2 (i) .Parent = b(我);
a2(我).SeriesIndex = 2;
取极限并集:
xlim (b) (i), [min ((b) (i) .XLim (1) b2 (i) .XLim(1)])马克斯((b) (i) .XLim (2) b2 (i) .XLim (2)))))
ylim (b) (i), [min ((b) (i) .YLim (1) b2 (i) .YLim(1)])马克斯((b) (i) .YLim (2) b2 (i) .YLim (2)))))
结束
为I = 1:数字(d2)
d2(我).Parent = e(我);
d2(我).SeriesIndex = 2;
xlim (e(我),(min ([e (i) .XLim (1) e2 (i) .XLim(1)])马克斯([e (i) .XLim (2) e2 (i) .XLim (2)))))
ylim (e(我),(min ([e (i) .YLim (1) e2 (i) .YLim(1)])马克斯([e (i) .YLim (2) e2 (i) .YLim (2)))))
结束
关上(ftemp)