多图 Matlab 包括图像

Multiple Plot Matlab including image

我使用 tiledlayout(2,2) 命令在 Matlab 中创建绘图。前三个标题字段填充了正常图。第四个也是最后一个字段是带有图像的字段。我使用了命令IMG = 'mypic.tif'imshow(IMG)。我想知道为什么我不能改变我的图像的大小。使用 tiledlayout 命令是不可能的吗?我已经查阅了 tiledlayoutimshow() 的纪录片,但没有找到对我有帮助的东西。

使用 tiledlayout 功能似乎确实无法做到这一点。但是,可以使用 subplot 功能。下面,我将举例说明这是如何工作的。

考虑以下脚本:

% Generate some dummy data for the four plots
x = linspace(0, 2*pi, 25);
y = sin(x);

% Load sample image
image = imread('ngc6543a.jpg');

% Generate the figure
fig = figure(1);

% The three subplots
for i = 1:3
    subplot(2,2,i);
    plot(x, y);
end

% The image
subplot(2,2,4);
imshow(image);

% Increase size of the image
size_factor = 1.4; % 1.0 is original size

im_ax = fig.Children(1);    % axes belonging to image
dims = im_ax.Position(3:4); % current dimensions

dims_new = size_factor * dims;  % scale old dimensions
dxdy = (dims_new - dims) / 2;   % offset for left bottom corner of image

im_ax.Position = [im_ax.Position(1:2) - dxdy, dims_new]; % update position

在此脚本中,我们首先为三个 'normal' 图生成一些虚拟数据并加载示例图像(此图像随我的 MATLAB 安装一起提供)。随后,我们创建一个图形。创建图形后,我使用 for 循环和 subplot 功能将三个虚拟图添加到图形中。然后,我们在第四个子图中使用 imshow 绘制图像。

现在,有趣的部分开始了。首先,我为图像定义一个比例因子 (size_factor)。然后,我检索绘制图像的轴并将其存储在 im_ax 中。从这个轴中,我检索 Position 字段的最后两个元素并将它们存储在 dims 中。这两个元素定义轴的大小。基于 size_factor 的值,我计算了轴的新大小并将其存储在 dims_new 中。为了确保轴(以及图像)保持居中,我们需要计算需要将轴的左下角移动多少(其坐标存储在 Position 字段的前两个元素中).此结果存储在 dxdy 中。我们做的最后一件事就是更新绘制图像的轴的 Position 字段。

现在,向您展示一些结果:

  1. size_factor 等于 1.0:
  2. size_factor 等于 1.4:
  3. size_factor 等于 0.55: