基于here的代码,我写了一个函数,它绘制了一个图形,并在图的顶部和底部放置了x轴标签,以及左侧和右侧的y轴标签。我的问题是我需要多次运行代码,每次标签都被写入,并且由于某种原因,y轴标签会以一种奇怪的方式被覆盖,如图所示, 第一次运行:
第二次运行:
以下是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轴标签的问题)但是如果我作为一个函数运行多次在调试模式下(这是我目前使用它的主要方式),然后我看到上面的文物。
答案 0 :(得分:0)
如果您运行代码,那么在最后检查您将看到您在脚本中创建了3个轴。运行一次,然后输入get(gcf,'Children')
。如果再次运行它,则会添加另外两个轴,每次运行时都会继续运行。
为什么会这样?
那么你的代码会创建2个新的轴手柄(你称之为相同的名称 - >你不应该这样做) - 但只有在你已经使用过gca
- >之后即当前轴(如果不存在,则创建一个轴)。
我建议你完全重新配置你的代码。首先创建2个轴,然后再进行绘图/标记等。独立存储2个轴变量,这样您就可以根据需要随时参考它们。
最好不要依赖gca
或gcf
来获取当前的轴或数字 - >因为它最终会回来咬你。存储轴/图形手柄并明确地引用它们。