2017-02-14 54 views
2

我想从MATLAB图中获取轴TickValues的位置。例如,我有一个数字,如下所示:在MATLAB图中查找轴TickValues的位置

MATLAB Figure

我试图找到轴TickValues的位置后,我图保存为图像(图中示出)。[注:该包围盒的手工。忽略任何错误]

axis TickValue Location

这里是我产生至今代码:

h = plot(1:10); 
hFrame = getframe(h.Parent.Parent); 
hImage = hFrame.cdata; 
set(h.Parent,'Units','pixel'); 

我试图从上hImage得到边界为x轴TickValues和y轴TickValues箱h.Parent的position

让我知道如果问题还不清楚。我会编辑以使其更清晰。

+0

什么是你真正想实现什么?这似乎是一种非常圆滑的方式。 – Suever

+0

我试图从手柄中获取图像中的那些区域(需要以像素为单位),因为我们知道图像通常以像素为单位。那些提取的地区将在未来用于其他目的。关键是从图形处理信息中提取图像。我不明白它是如何完成的。 – user7410580

+0

为什么不使用'getframe(h.Parent)'来保存不包含标签的部分?如果你只是想要“轴”的位置,你可能不需要保存图像。只需使用'h.Parent.Position'来获取它。 – Suever

回答

1

由于@suever suggested in comments,轴的Position属性将是做到这一点的最简单的方法:

h = plot(1:10); 
pos = h.Parent.Position; % get the axes position 
m = 3; % width and hight multiplyer 
xth = h.Parent.XAxis.TickLength(2); % get x-axis tick hight 
dimx = [pos(1)-xth pos(2)-xth*m pos(3)+xth*2 xth*m]; 
annotation('rectangle',dimx,'color','r') % for demonstration 
yth = h.Parent.YAxis.TickLength(2); % get y-axis tick hight 
dimy = [pos(1)-yth*(m-1) pos(2)-yth yth*(m-1) pos(4)+yth*2]; 
annotation('rectangle',dimy,'color','r') % for demonstration 

示范:

axis_position

,你可以改变m,以确保所有的刻度值都在边界框内。


编辑:

选项2:

op2

方案3:

op3

+0

这是一个很好但不安静的优雅解决方案。这是一种解决方法。如果我们看看你的情况,就会有重叠。如果我将乘数更改为1,它实际上高于tickValues – user7410580

+0

@ user7410580我看不出它们如何重叠?你能画这个吗? – EBH

+0

可能是我在重叠部分错了;但我正在寻找一个解决方案,其中包含一个专门为轴值分配的区域。 – user7410580