Fix the limits of Yaxis secondary axis

2 次查看(过去 30 天)
Hi,
I have the following code which I am duplicating for 6 different data sets. I want to limit the Y secondary axis from -25 -20 -15 -10 -5 0 5 10 15 20 25. I have posted the code below but it does not work even though I have given the limits. Can somebody help me to figure this out.?
Thanks in advance.
YearlyAnnualZ2=[1389.0;1663.1;1639.6;1776.6;1811.5;1346.8;1615.9;1578.6;1612.7;1497.3;1786.1;1315.7;1519.4;1864.0;1590.8];
AnnualZ2=[1292.1;1553.9;1718.8;1815.4;1856.5;1339;1840.9;1637.0;1509.9;1420.9;1965.3;1163.6;1319.3;1866.7;1706.1];
error=[-6.9768;-6.5677;4.8270;2.1831;2.4827;-0.5803;13.9195;3.6932;-6.3774;-5.1068;10.0316;-11.5617;-13.1733;0.1414;7.2471];
ZonalMean=[1600.5];
y=[YearlyAnnualZ2 AnnualZ2];
h=bar('v6',y,1,'group');
set(h(1),'facecolor','blue')
set(h(2),'facecolor','green')
months =['1998';'1999';'2000';'2001';'2002';'2003';'2004';'2005';'2006';'2007';'2008';'2009';'2010';'2011';'2012'];
set(gca,'XTick',1:1:15)
set(gca,'XTickLabel',months,'fontsize',14)
set(gca,'TickLength',[0.0005 0.0005])
xlim([0 16]);
ylim([600 2800]);
xL = get(gca,'XLim');
line(xL,[ZonalMean ZonalMean],'Color','b','LineWidth',2,'LineStyle','-');
line(xL,[mean(AnnualZ2) mean(AnnualZ2)],'Color','g','LineWidth',2,'LineStyle','-');
xlabel(''),ylabel('Precipitation (mm)')
% Plot with a secondary axis in the same above developed bar graph
mon=1:1:15;
h1 = gca;
h2 = axes('Position',get(h1,'Position'));
L1=plot(mon,error,'-ro','LineWidth',2.0,'MarkerSize',8);
hold on
set(h2,'YAxisLocation','right','Color','none','XTickLabel',[],'fontsize',12,'YColor', 'r')
set(gca,'XTick',1:1:15)
set(gca,'YTickLabel',[-25 -20 -15 -10 -5 0 5 10 15 20 25],'fontsize',12)
set(gca,'TickLength',[0.0005 0.0005])
set(h2,'XLim',get(h1,'XLim'),'Layer','top')
set(gca,'box','off'); % here gca means get current axis
ylabel('Error (%)','FontSize',12)
k1 = legend(h,'TRMM Avg.Annual','Station Annual',1);
set(k1,'Orientation','vertical','Visible','on',...
'FontSize',12,'Box','off');
  2 个评论
dpb
dpb 2014-7-2
That part looks ok here altho I'd suggest in a case like this when there are multiple axes, to never rely on gca but always use the explicit handle to ensure operating on the desired axes object.
Also, you've got competing x-axis labels, I presume only the years should show up. To do that use
set(h2,'xtick',[])
to turn off the x-axis labeling on the second.
I had to shrink the font size significantly to keep the years from overrunning each other, but if you stretch the figure out significantly from the default opening size you can probably make that go away.
Lastly, why don't you use
hA=plotyy(@bar,xb,yb,@plot,xp,yp);
and then fixup those two axes as a little more direct route to the end objective?
Damith
Damith 2014-7-2
Thanks for your reply. I will try this too. But for the time being Geoff's methid worked. I appreciate yours too.

请先登录,再进行评论。

采纳的回答

Geoff Hayes
Geoff Hayes 2014-7-2
Try setting the y-axis limits of the axes before changing the labels. Just change
set(gca,'YTickLabel',[-25 -20 -15 -10 -5 0 5 10 15 20 25],'fontsize',12)
to
set(gca,'YLim',[-25 25],'YTickLabel',[-25 -20 -15 -10 -5 0 5 10 15 20 25],'fontsize',12)
so that the tick labels fit within the limits for that axis.
  5 个评论
dpb
dpb 2014-7-2
...Try setting the y-axis limits of the axes before changing the labels...
The tick labels are immaterial to the tick values; only that you do need the same number of ticks to correspond 1:1 with the label array. What really need to ensure the case wanted would be
ylim(h2,[-25 25]);
set(h2,'xtick',[-25:5:25])
and the tick labels will appear automagically.
BTW, to see the aforementioned point clearly, try
>> ylim(h2,[-25 25])
>> set(h2,'yticklabel',[25:-5:-25])
>> get(h2,'ytick')
ans =
-25 -20 -15 -10 -5 0 5 10 15 20 25
and you'll see the labels are in decreasing order bottom to top while the actual ticks are still increasing.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Graphics Object Properties 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by