情况:使用imagesc更改单个子图的位置
%% Matlab recommends this structure if axes(); in loop
a1 = subplot(1,2,1);
a2 = subplot(1,2,2);
while 1
plot(a1, rand(3))
plot(a2, rand(3))
drawnow
end
%% Test code
unitsPerInches=[0 0 15 15];
figure('Units', 'inches');
a1 = subplot(1,2,1);
a2 = subplot(1,2,2);
while 1
set(a1, 'Position', unitsPerInches); % TODO how to affect a1's Position here only?
imagesc(a1, rand(3))
imagesc(a2, rand(3))
drawnow
end
打开
imagesc
对应的plot(a1,rand(3))
结构是什么?Position
的{{1}}?figure
图。 1文档输出示例,图2图像输出c,图3关于Q2其中位置影响两个子图
Q1差不多完成了;我刚刚忘记了如何在imagesc中获得相应的情节; x值应该放在那里,但伪代码%% Extension to imagesc
figure
a1=subplot(1,2,1);
a2=subplot(1,2,2);
for counter=1:2;
imagesc(a1,rand(3))
imagesc(a2,rand(3))
drawnow
end
是不成功的。
代码
imagesc(a1,XDATA,rand(3))
输出:位置影响图3中的两个图像。
我认为我误解了这里位置的含义,因为输出很奇怪。
当两个数字包含子图
时,隐式赋值会导致问题%% Extension to imagesc
unitsPerInches=[0 0 15 15];
figure
a1=subplot(1,2,1);
a2=subplot(1,2,2);
for counter=1:2;
set(a1, 'Position', unitsPerInches); % TODO how to affect a1's Position here only?
imagesc(a1,rand(3))
imagesc(a1,rand(3))
drawnow
end
输出:子图的第二个数字失败。
系统:Linux Ubuntu 16.04 64位
Linux内核4.6
Matlab:2016a
相关主题:Matlab7 'bug' when using "subplot" + "imagesc"?
答案 0 :(得分:3)
我并不是100%确定你要问的是什么,但我认为它是关于在循环中组合多个imagesc
语句的。我会做更直接的事情 - 使用gca
并将子图放在循环中。通常,如果您想以编程方式处理多个图像,除了创建许多不同命名的变量之外,将它们置于某种结构中是有意义的。还要注意while 1
可能不是你想要的 - 它会锤击你的图形设备驱动程序 - 并且pause
可以接受一个参数作为等待函数,在几分之一秒内如果需要。
testImages{1}=double(imread('coins.png'));
testImages{2}=double(imread('cameraman.tif'));
h=figure;
set(h,'color','w'); %This handle refers to the background window
for ix=1:2
subplot(1,2,ix);
imagesc(testImages{ix});
axis equal;
colormap gray;
%Change, for example, axis position
curPoss=get(gca,'Position'); %gca stands for 'get current axis'
set(gca,'Position',curPoss+1e-2*ix^2); %Move one image up a bit
end
这有帮助吗?
答案 1 :(得分:1)
如果你想在数字之间跳转,做一个数组,并在循环中使用它:
unitsPerInches = [0.1 0.1 0.15 0.15];
figs = [figure(1) figure(2)];
for f = 1:numel(figs)
figure(figs(f));
for counter = 1:2;
subplot(1,2,counter);
imagesc(rand(3));
drawnow
end
figs(f).Children(1).Position = unitsPerInches;
figs(f).Children(2).Position = unitsPerInches+0.3;
end
unitsPerInches
的原始值错误,因为axes
的{{3}}属性默认值介于0到1之间。您可以使用'Position'
属性更改此设置,例如:
figs(f).Children(1).Units = 'inches';
此示例的输出是两个如下所示的数字:
左下方有一个小轴,右上方有一个大轴。
所以,回到原来的问题:
- 醇>
imagesc
对应的plot(a1,rand(3))
结构是什么?
不是将轴传递给imagesc
,而是将焦点设置在相关图上,并将子图设置为:
figure(h)
subplot(x,y,c)
imagesc(data)
其中h
是相关数字的句柄,c
是要在h
内绘制图像的子图的位置(1到{{1之间的数字) }}),在这两行之后你调用x*y
。
- 如何在循环中更改图中的
醇>imagesc
?
在这个问题中,您不清楚是否要更改或figure的“位置”,它们具有不同的单位和含义,但两者都可以通过相同的方式访问:
'Position'
其中h.Position = [left bottom width height]; % for the position of the figure
h.Children(c).Position = [left bottom width height]; % for the position of the axes
与之前相同,但h
的编号可能不同,因此c
可能与subplot(x,y,c)
不同。但是,您始终可以使用h.Children(c)
来获取当前轴:
gca
希望现在一切都清楚,如果还有其他问题,请告诉我们;)