Matlab - 图例与我的图形不符

时间:2014-10-01 12:19:33

标签: matlab plot legend

我无法将图表与轴匹配。前两个图表工作,后两个图表不工作。我试图绘制两个Argo浮标的温度与压力,然后是盐度与压力。这是我的代码:

% First Plot
subplot(221);
plot(float1winter.T,float1winter.P,'b');     
hold on;
plot(float1summer.T,float1summer.P,'r');
hold on;
tempAdiff = abs(float1summer.T-float1winter.T)
plot(tempAdiff,float1summer.P,'--k');
hold on;
set(gca,'ydir','reverse');  
title('Argo Float #1901440 Temp Profiles');
legend(['float1winter','float1summer','tempAdiff'],{'11-29-2013','07-01-2013','Temperature Difference'},'location','southwest');
xlabel('Temperature (°C)');
ylabel('Pressure');
shg;



% Second Plot
subplot(222);
plot(float2winter.S,float2winter.P,'m'); 
hold on;
plot(float2summer.S,float2summer.P,'c');
hold on;
set(gca,'ydir','reverse');
title('Argo Float #1901440 Salinity Profiles');
legend(['float2winter','float2summer'],{'11-29-2013','06-02-2013'},'location','southwest');
xlabel('Salinity (psu)');
ylabel('Presure');
shg;



% Third Plot
subplot(223);
% Matrix demensions did not agree bewteen winter and summer profiles.  The summer profile was 71 x 2 and the winter was 70 x 2. I tried "reshape"
% and that didn't work.   So I changed the vector of float3summer.T to
% float3bsummer.T with an array of 70 x 2
float3bsummer.T = float3summer.T(1:70,1:2);
float3bsummer.P = float3summer.P(1:70,1:2);
plot(float3winter.T,float3winter.P,'Linewidth',1,'color','blue'); 
hold on;
plot(float3bsummer.T,float3bsummer.P,'Linewidth',1,'color','red');
hold on;
tempdiff = abs(float3bsummer.T-float3winter.T)
plot(tempdiff,float3bsummer.P,'--k');
hold on;
set(gca,'ydir','reverse');  % this line reverses the y-axis so that depth increases downward
title('Argo Float #1901415 Tempearture Profiles');
hold on;
summerfloat = plot(float3bsummer.T,float3bsummer.P,'r');
legend(['float3winter.T','summerfloat','tempdiff'],{'12-03-2013','07-03-2013','Temp Diff'},'location','southeast');
xlabel('Temperature (°C)');
ylabel('Pressure');
axis ([-1,4,0,2000]);
shg;


% Fourth Plot
subplot(224);
plot(float3winter.S,float3winter.P,'g'); 
% Changed matrix dimensions for Salinity of Summer
float3bsummer.S = float3summer.S(1:70,1:2);
float3bsummer.P = float3summer.P(1:70,1:2);
plot(float3bsummer.S,float3bsummer.P,'.b');
hold on;
set(gca,'ydir','reverse');
title('Argo Float #1901415 Salinity Profiles');
h4 = plot(float3winter.S,float3winter.P,'g');
hold on;
h5 = plot(float3bsummer.S,float3bsummer.P,'.b');
hold on;
legend(['float3winter','float3bsummer.T'],{'12-03-2013','07-03-2013'},'location','southwest');
xlabel('Salinity (psu)');
ylabel('Pressure');
axis ([33.8,34.8,0,2000]);
shg;



% Save File to Desktop
set(gcf,'color','w');
saveas(gcf,'~/Desktop/hw1_figure1.pdf','pdf');![enter image description here][1]

1 个答案:

答案 0 :(得分:3)

我猜您是想尝试将图例的字符串集合{'11-29-2013','07-01-2013','Temperature Difference'}与变量['float1winter','float1summer','tempAdiff']的图表相关联。

但是,这不是legend的工作方式。 MATLAB无法将plot(float1winter.T,float1winter.P,'b');生成的绘图与字符串float1winter相关联。如果要指定哪些图表与哪些图例条目一起使用,则需要将图表的对象句柄传递给legend,这最简单的方法是在最初plot时返回句柄:

h(1) = plot(float1winter.T,float1winter.P,'b');     
hold on;
h(2) = plot(float1summer.T,float1summer.P,'r');
h(3) = plot(tempAdiff,float1summer.P,'--k');
legend(h,{'11-29-2013','07-01-2013','Temperature Difference'});

附注:您只需要为每个轴拨打hold on一次 - 因此每个subplot都会调用一次,但不会在每次plot调用后调用一次。

或者,你根本不能给出句柄; legend会按照绘制顺序将文本分配给绘图:

legend({'11-29-2013','07-01-2013','Temperature Difference'})

了解图形控制柄可以让您更好地控制图形,尤其是在您可能需要对它们进行小幅调整时。例如,如果我决定我希望第一个图是绿色而不是蓝色,那么我可以这样做:

set(h(1),'Color','g');

这将更改图例颜色图例更改以自动匹配。要查看对象的所有属性的列表,请仅使用句柄使用get。您一次可以set多个房产。例如:

get(h(1))
set(h(1),'DisplayName','Winter','LineWidth',3,'Marker','x')