matlabs只能在一边绘制每个绘图的坐标轴
以下代码显示了我的问题。如果蜱不在两侧的相同位置(这是正常情况下...),则plotyy完全失败(matlabs只能在一边绘制每个绘图的坐标轴
我需要一个有两个y轴的绘图,但只在一侧绘制刻度。我被建议使用addaxis,但我不明白这对我有什么帮助,因为我不想分开的轴。
clf;
clc;
xaxis = 0:0.1:25;
ydata1 = linspace(12.1712,12.7679, length(xaxis));
ydata2 = linspace(0.3597,-28.7745, length(xaxis));
[AX,H1,H2] = plotyy(xaxis, ydata1, xaxis, ydata2);
% axis limits - x axis (min to max)
xlimits(1) = min(xaxis); xlimits(2) = max(xaxis);
set(AX, 'XLim', xlimits);
set(AX(2),'XTick',[]);
% y1 axis limits
ylimits(1) = min(ydata1); ylimits(2) = max(ydata1);
ylimits(2) = ylimits(2) + (ylimits(2)-ylimits(1))*0.05;
set(AX(1), 'YLim', ylimits);
% y2 axis limits
ylimits(1) = min(ydata2); ylimits(2) = max(ydata2);
ylimits(2) = ylimits(2) + (ylimits(2)-ylimits(1))*0.05;
set(AX(2), 'YLim', ylimits);
% y1 ticks
set(AX(1),'YTick',[12.0:0.1:12.8]);
% y2 ticks
set(AX(2),'YTick',[-25:5:0]);
print(gcf, ['-r' num2str(400)], ['test' '.png' ], ['-d' 'png']);
这里有一个方法,我从mathworks forum了。这个想法是删除box属性,这会在相反的一面创建抽搐。
set(AX(1),'Box','off') % Turn off box of axis 1, which removes its right-hand ticks
set(AX(2),'Box','off') % Turn off box of axis 2, which removes its left-hand ticks
缺点是上线消失。如果有人知道如何让它恢复,那会很棒。 Mybe在同一尺寸的当前地块上有空的地块?
尝试将蜱空集:
set(AX(2),'YTick',[]);
或
set(AX(1),'YTick',[]);
编辑(1):您可以手动创建左边的标签并将右侧设置为[]
:
clf;
clc;
xaxis = 0:0.1:25;
ydata1 = linspace(12.1712,12.7679, length(xaxis));
ydata2 = linspace(0.3597,-28.7745, length(xaxis));
[AX,H1,H2] = plotyy(xaxis, ydata1, xaxis, ydata2);
% axis limits - x axis (min to max)
xlimits(1) = min(xaxis); xlimits(2) = max(xaxis);
set(AX, 'XLim', xlimits);
set(AX(2),'XTick',[]);
% y1 axis limits
ylimits(1) = min(ydata1); ylimits(2) = max(ydata1);
ylimits(2) = ylimits(2) + (ylimits(2)-ylimits(1))*0.05;
set(AX(1), 'YLim', ylimits);
x = linspace(ylimits(1),ylimits(2),10);
ticks1 = arrayfun(@(t){sprintf('%2.2f',t)},x);
% y2 axis limits
ylimits(1) = min(ydata2); ylimits(2) = max(ydata2);
ylimits(2) = ylimits(2) + (ylimits(2)-ylimits(1))*0.05;
x = linspace(ylimits(1),ylimits(2),10);
ticks2 = arrayfun(@(t){sprintf('%2.2f',t)},x);
set(AX(2), 'YLim', ylimits);
ticks = cell(size(ticks1));
for i=1:numel(ticks1)
ticks{i} = sprintf('%s/%s',ticks1{i},ticks2{i});
end
% y1 ticks
set(AX(1),'YTickLabel',ticks);
% % y2 ticks
set(AX(2),'YTick',[]);
对不起,但这不是一个解决方案。我需要两个y轴上的蜱虫。双方都不是双方! – 2012-02-11 17:19:54
@MatthiasPospiech,请参阅最新的答案。 – 2012-02-11 20:48:57
好主意,但不是真的如何为出版物创建情节。 – 2012-02-12 21:26:00
马蒂亚斯,
设置XAxisLocation顶部,并禁用XTickLabel。上面的线是背面现在:)
set(AX(2),'XAxisLocation','top', 'XTickLabel',[])
下面是使用第三轴线的溶液。对于此解决方案,首先按照建议的方式打开框
set(ax(1),'Box','off') % Turn off box of axis 1, which removes its right-hand ticks
set(ax(2),'Box','off') % Turn off box of axis 2, which removes its left-hand ticks
现在,另外在同一位置添加第三根轴。
ax3 = axes('Position', get(ax(1), 'Position'),...
'XAxisLocation', 'top',...
'XTickLabel', my_XTickLabels_on_top,...
'YColor', 'none',...
'YTick', [],...
'YTickLabel', [],...
'Color', 'none', ...
cell_with_further_pValPairs{:});
也可以链接所有轴对象的轴'x'
。限制和滴答将随后相应地更新。
linkaxes([ax ax3], 'x')
这将,但是,无法正常更新第三轴的蜱,除非你写一个适当的回调,这得到了更棘手的MATLAB 2014b
做以上 为了使“真实”轴当前坐标,可以使用
axes(ax)
'set(AX(2),'XAxisLocation','top','XTickLabel',[]);' – craigim 2014-03-14 15:57:12