MATLAB:在绘图的每一侧放置x和y标签的问题

时间:2016-10-25 01:09:02

标签: matlab plot axis-labels

基于here的代码,我写了一个函数,它绘制了一个图形,并在图的顶部和底部放置了x轴标签,以及左侧和右侧的y轴标签。我的问题是我需要多次运行代码,每次标签都被写入,并且由于某种原因,y轴标签会以一种奇怪的方式被覆盖,如图所示, 第一次运行:

enter image description here

第二次运行:

enter image description here

以下是mwe:

% sample data, plot
x=[1:168];
y=x;
plot(x, y, 'r', 'LineWidth', 1);


set(gca, 'XTick', [], 'YTick', []);

% set left yaxis label 
ylabel(directions{1,1},'Rotation',-360);

% Adjust position - this seems to be what's causing the issue!
ylabelh = get(gca,'YLabel');
rpos = get(ylabelh,'Position');
set(ylabelh,'Position',rpos + [1.5*rpos(1) 0 0])

% do stuff... as per link above
axesPosition = get(gca,'Position');   
hNewAxes = axes('Position',axesPosition,...  %# Place a new axes on top...
            'Color','none',...          %#   ... with no background color
            'YAxisLocation','right',...  %#   ... located on the right
            'XTick',[],'YTick',[],...           %#   ... with no x tick marks
            'Box','off');   

ylabel(hNewAxes,directions{2,1},'Rotation',-360); % yaxis label right

% Adjust position
ylabelh = get(gca,'YLabel');
Lpos = get(ylabelh,'Position');
set(gca,'YTick',[]);
set(ylabelh,'Position',Lpos+ [+Lpos(1)*0.02 0.05 0])

% -- And repeat for x axis -- %

% x axis labels
xlabel(directions{3,1},'Rotation',-360); % xaxis label bottom
% Adjust position
xlabelh = get(gca,'XLabel');
xlabpos =  get(xlabelh,'Position');
set(gca,'XTick',[]);
rpos = get(xlabelh,'Position');
% do stuff ... as above
axesPosition = get(gca,'Position');
hNewAxes = axes('Position',axesPosition,...  %# Place a new axes on top...
            'Color','none',...          %#   ... with no background color
            'XAxisLocation','top',...  %#   ... located on the right
            'XTick',[],'YTick',[], ...          %#   ... with no x tick marks
            'Box','off');   

% xaxis label top
xlabel(hNewAxes,directions{4,1},'Rotation',-360);

奇怪的是,如果我将代码作为脚本运行它很好(好吧,标签被写完但是我没有看到y轴标签的问题)但是如果我作为一个函数运行多次在调试模式下(这是我目前使用它的主要方式),然后我看到上面的文物。

1 个答案:

答案 0 :(得分:0)

如果您运行代码,那么在最后检查您将看到您在脚本中创建了3个轴。运行一次,然后输入get(gcf,'Children')。如果再次运行它,则会添加另外两个轴,每次运行时都会继续运行。

为什么会这样?

那么你的代码会创建2个新的轴手柄(你称之为相同的名称 - >你不应该这样做) - 但只有在你已经使用过gca - >之后即当前轴(如果不存在,则创建一个轴)。

我建议你完全重新配置你的代码。首先创建2个轴,然后再进行绘图/标记等。独立存储2个轴变量,这样您就可以根据需要随时参考它们。

最好不要依赖gcagcf来获取当前的轴或数字 - >因为它最终会回来咬你。存储轴/图形手柄并明确地引用它们。