当前位置: 动力学知识库 > 问答 > 编程问答 >

plot - Why is the actual value of an axis position different than the derived value in MATLAB suplot figure?

问题描述:

I've got a figure with two subplots being displayed. I want to get the axis position of each plot so I am using the figure's children information:

 subplot(211)

% Plot stuff here

...

subplot(212)

% Plot stuff here

...

% Get Axes Position information

f =gcf;

% Bottom Plot Axis

disp(f.Children(2).Position)

% Top Plot Axis

disp(f.Children(4).Position)

The console displays:

 Bottom plot:

0.1300 0.1100 0.7750 0.3412

Top plot:

0.1300 0.5838 0.7750 0.3412

This seems correct given all else. When I run the plot to generate the figure and then inspect the axes' information via 'Show Plot Tools and Dock Figure->Inspector: matlab.graphics.axis.Axes' option the width value for each axis's position is not 0.7750. The other position values are as listed but the width is different for both the top and bottom plots. The top becomes [0.13 0.5838 0.682 0.341] and the bottom becomes [0.13 0.11 0.67 0.341].

Does anyone know why this is and how to get the "real" position values and not the incorrect displayed/printed ones?

Useful info: MATLAB R2014b

EDIT UPDATE:

Here is a MWE that produces the behavior.

clear all; close all; clc;

figure;

subplot(211)

hold on

x1 = [ -1 -0.998 -0.996 -0.994 -0.992];

y = [0.000324249267578125 -0.000370025634765625 -3.4332275390625e-005 -0.000186920166015625 -0.000110626220703125];

plot(x1, y, '-', 'MarkerSize', 10)

set(gca, 'FontName', 'Interstate-Light', 'FontSize', 7)

set(gca, 'XTickLabel', [])

set(gca, 'XLabel', [])

grid on

ylabel('Frequency Error (Hz)', 'FontName', 'Interstate-Bold')

legend({'FE'}, 'Location', 'NorthEastOutside', 'FontName', 'Interstate-Light', 'Box', 'off')

subplot(212)

hold on

x1 = [ -1 -0.998 -0.996 -0.994 -0.992];

y = [-0.010614013299346 -0.0417663566768169 0.0235949698835611 -0.0502893067896366 0.0316442884504795];

plot(x1, y, '-', 'MarkerSize', 10)

% Overide X-axis ticks to align with data

XTick = unique(x1);

grid on;

xlabel('Time (s)', 'FontName', 'Interstate-Bold')

ylabel('Frequency Error (Hz)', 'FontName', 'Interstate-Bold')

set(gca, 'FontName', 'Interstate-Light', 'FontSize', 7)

legend({'RFE'}, 'Location', 'NorthEastOutside', 'FontName', 'Interstate-Light', 'Box', 'off')

% Get figure object

f = gcf;

% Set fontsize to 16 for readability in final pdf

set(findall(f, '-property','FontSize'),'FontSize',16)

f.PaperUnits = 'inches';

f.PaperPosition = [0 0 20 14];

f.PaperPositionMode = 'manual';

% Get axis position info

disp('Second plot:')

disp(f.Children(2).Position)

disp('First Plot:')

disp(f.Children(4).Position)

网友答案:

I'm working with R2012b and I've been able to reproduce the problem and also (almost) been able to understand what's happening.

I do not know if it is also applicable to more "recent" versin of MatLab.

The problem seems related to the default configuration of the window Show Plot Tools and Dock Figure

With this configuration, actually the position of the two axes (read in the Property editor are different with respect to the "original ones:

original pos ax 1=  [0.1300    0.5838    0.7750    0.3412]
new pos ax1=[0.1300    0.629     0.7750    0.268 ]

Nevertheless, if you minimize the Property editor tab and look at the Position of the two axes, they are restored to the "original" one values.

You can, the "slide up" the tab and the position still remain the "original onne.

I'do not know if this is actually an answer to you question; what I can say is that the right position position are the "original" ones.

It could be a sort of bug in the visualization in the default configuratin od the Show Plot Tools and Dock Figure window.

Hope this helps.

分享给朋友:
您可能感兴趣的文章:
随机阅读: