多图 Matlab 包括图像
Multiple Plot Matlab including image
我使用 tiledlayout(2,2)
命令在 Matlab 中创建绘图。前三个标题字段填充了正常图。第四个也是最后一个字段是带有图像的字段。我使用了命令IMG = 'mypic.tif'
和imshow(IMG)
。我想知道为什么我不能改变我的图像的大小。使用 tiledlayout
命令是不可能的吗?我已经查阅了 tiledlayout
和 imshow()
的纪录片,但没有找到对我有帮助的东西。
使用 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
字段。
现在,向您展示一些结果:
size_factor
等于 1.0
:
size_factor
等于 1.4
:
size_factor
等于 0.55
:
我使用 tiledlayout(2,2)
命令在 Matlab 中创建绘图。前三个标题字段填充了正常图。第四个也是最后一个字段是带有图像的字段。我使用了命令IMG = 'mypic.tif'
和imshow(IMG)
。我想知道为什么我不能改变我的图像的大小。使用 tiledlayout
命令是不可能的吗?我已经查阅了 tiledlayout
和 imshow()
的纪录片,但没有找到对我有帮助的东西。
使用 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
字段。
现在,向您展示一些结果:
size_factor
等于1.0
:size_factor
等于1.4
:size_factor
等于0.55
: