我想在将图形保存到.png之前在图形周围放置一个边框,以突出显示一些最重要的图形。有没有办法在轴绘图区域之外绘制一个矩形?
我希望边框能够在整个地块周围延伸,甚至包括地块标题和轴标签。
答案 0 :(得分:3)
您可以通过将轴放在uipanel
内并调整panel position,edge design,figure color和panel colors来创建各种边框类型。例如,这会创建一个宽的青色边框,其边缘从面板边缘延伸到图形边缘:
hFigure = figure('Color', 'c'); % Make a figure with a cyan background
hPanel = uipanel(hFigure, 'Units', 'normalized', ...
'Position', [0.1 0.1 0.8 0.8], ...
'BorderType', 'BeveledIn'); % Make a panel with beveled-in borders
hAxes = axes(hPanel, 'Color', 'none'); % Set the axes background color to none
title('Title Here');
这会产生一个5像素宽的红线边框,紧贴图形的边缘:
hFigure = figure(); % Make a figure
hPanel = uipanel(hFigure, 'Units', 'normalized', ...
'Position', [0 0 1 1], ...
'BorderType', 'line', ...
'BorderWidth', 5, ...
'BackgroundColor', 'w', ...
'HighlightColor', 'r'); % Make a white panel with red line borders
hAxes = axes(hPanel, 'Color', 'none'); % Set the axes background color to none
title('Title Here');
答案 1 :(得分:1)
两个选项:
1-将Clipping axes property设置为'off'
,并在轴边界外绘制一个矩形。你必须使用轴的单位找出正确的位置。在不同的图表中一致地做这可能有点挑战。
2-创建辅助轴,使其不可见,调整大小以占据整个图形,并在其中绘制一个矩形:
f = figure
% One axes is invisible and contains a blue rectangle:
h = axes('parent',f,'position',[0,0,1,1],'visible','off')
set(h,'xlim',[0,1],'ylim',[0,1])
rectangle(h,'position',[0.01,0.01,0.98,0.98],'edgecolor',[0,0,0.5],'linewidth',3)
% Another axes is visible and you use as normal:
h = axes('parent',f)
plot(h,0:0.1:10,sin(0:0.1:10),'r-')
(我在这里明确地使用f
和h
作为“父”对象,因为这通常会导致更强大的代码,但是你可以将它们排除在外,并依赖于隐式使用的{ {1}}和gcf
大部分时间做正确的事。)
答案 2 :(得分:0)
找到解决方案。将绘图保存到图像后,可以将其重新加载到图形中,然后在图像顶部绘制边框。
img = imread('test_image.png');
fh = figure;
imshow(img,'border','tight')
hold on;
figurepos = get(gcf,'Position');
rectangle('Position',[4 4 figurepos(3)-7 figurepos(4)-7],'LineWidth',5,'EdgeColor','red')