【问题标题】:set Position in matlab results in unexpected position在matlab中设置位置导致意外位置
【发布时间】:2015-11-20 14:02:36
【问题描述】:

我有以下 matlab 代码 sn-p 生成两个子图。

h = figure;
sp1 = subplot(1,2,1); hold on;
plot(xenDates, yXenDates, '.', 'color', cmap(1,:));
plot(xenPatchDates, yXenPatchDates, '.', 'color', cmap(2,:));
xlabel('Time in Months');
ylabel('Cumulative Number');
legend('Vulnerabilities','Patches','Location','northoutside');
sp1Pos = get(sp1, 'Position');
sp2 = subplot(1,2,2); hold on;
sp2Pos = get(sp2, 'Position');
plot(kvmDates, yKvmDates, '.', 'color', cmap(1,:), 'Markersize', 10);
plot(kvmPatchDates, yKvmPatchDates, '.', 'color', cmap(2,:));
xlabel('Time in Months');
ylabel('Cumulative Number');
set(sp2, 'Position', [sp2Pos(1) sp1Pos(2) sp2Pos(3) sp1Pos(4)]);

由于图例位于第一个子图的顶部,我想手动调整第二个子图的大小,以便两者具有相同的大小。所以我得到位置值并将它们设置为最后一行中的 subplot2。然而奇怪的是,子图向下移动了一点,使得 x 轴没有对齐。

当我打电话时也会发生这种情况

pos = get(sp2, 'Position');
set(sp2, pos(1) pos(2) pos(3) pos(4));

直接连续。

是我做错了什么还是这是一个已知问题?

更新:

不添加drawow;将单位更改为像素也没有改变任何东西。附上一张显示问题的图片。

【问题讨论】:

  • 我无法在 R2014b 上重现您的问题,仅当我调整图形大小时子图才会错位...您是否尝试将 Units 属性更改为 pixels
  • 我无法重现您提到的行为,轴在我的屏幕上完全对齐。我跑2012a。在获取sp1sp2 轴的位置之前插入drawnow 调用怎么样?
  • 您使用的是哪个版本的 MATLAB?
  • 对不起。忘了提。它是 R2013a。现在我通过将右子图向上移动 0.013 并将垂直大小减小相同的值来“修复”它。
  • 我无法在 Matlab 2013a 中重现您的问题

标签: matlab subplot


【解决方案1】:

现在我能够重现您的问题,它只发生在非常小的数字尺寸上。不要调整第二个图的大小,而是在右侧绘制一个不可见的图例。它将占用与第一个图例完全相同的空间:

h2=legend('Vulnerabilities','Patches','Location','northoutside');
set(h2,'visible','off')

并从您的代码中删除最后一行。

【讨论】:

  • 虽然由于需要调整两个子图的大小以进行打印,但我已经解决了这个问题,但这确实解决了最初的问题。非常感谢!下次注意!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
相关资源
最近更新 更多