matlab - 在 matlab 中设置位置导致意外位置

标签 matlab subplot

我有以下 matlab 代码片段,它生成两个彼此分开的子图。

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));

直接连续。

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

更新:

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

Misaligned x axis

最佳答案

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

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

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

关于matlab - 在 matlab 中设置位置导致意外位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228186/

相关文章:

python - 在 python 与 matlab 中切片矩阵

python - seaborn gridplot/subplots 在同一行 ID 的第一列上显示一个变量,在第二列上显示另一个变量

matlab - 寻找帐篷 map 的固定点/吸引器/排斥器

matlab - 与Matlab一起使用OpenCV:mex找不到头文件

image - MATLAB - 如何从 .fig 文件中裁剪图像的某些部分并将其另存为 .mat?

matlab - 删除 Y 轴图上的科学计数法数字

matlab - 第二个子图消失

matplotlib 添加艺术家不在图例上显示标签

python - 自动填充子图

matplotlib - 从 matplotlib 中的 bar 对象中检索 yerr 值