2017-04-21 4 views
0

전동기의 동력과 토크를 같은 그래프에 그려 볼 것입니다. 델타 스타 구성을 그리기 위해 사이클을 사용했습니다. 이중 기어 시스템도 있으므로 각 구성에 대해 2 시리즈의 데이터 (전력 및 토크)를 플로팅합니다. 나는 이것을 시도했지만 두 번째 루프에서는 첫 번째가 아니라 두 번째 축에 그려진다. 내가 MATLAB 2015을 사용, 그래서 내가 yyaxis functionMatlab - 다른 y 축에 플롯하는 방법

clc; clear all;close all 

tau=[8.823;1.604]; %in ordine decrescente 
n_gamme=length(tau); 
data=[22 22;575 1200;1500 6000;365 175];%P,Ginocchio,rpm max,C 
names={'Star';'Delta'}; 

nN=zeros(2);nmax=zeros(2);M_N=zeros(2); %inizializzo 

for i=1:n_gamme %contatore gamme 
%  j=1; se non ho stella-triangolo 
for j=1:2 %contatore stella-triangolo 
    P=data(1); %potenza max 
    nN(i,j)=data(2,j)./tau(i); %rpm, ginocchio 
    nmax(i,j)=data(3,j)/tau(i); %giri max 
    M_N(i,j)=data(4,j)*tau(i); %coppia max 
end  
end 

PL=['r','r-';'g','g-']; 

%  j=1; %se non ho stella-triangolo 
for j=1:2 %contatore stella-triangolo 
%   subplot(length(tau),1,j); 
%   figure 

    x1(j,:) = linspace(0,nN(1,j)); %numero di giri da 0 al ginocchio 1 
    x2(j,:) = linspace(nN(1,j),nmax(1,j)); %da ginocchio 1 a max 1 
    x3(j,:) = linspace(0,nN(2,j)); %da 0 a ginocchio 2 
    x4(j,:) = linspace(nN(2,j),nmax(2,j)); %da ginocchio 2 a max 2 

    C_1(1,j)=M_N(1,j); %coppia costante 1 marcia 
    C_2(j,:)=30*P*1000./(pi*x2(j,:)); %coppia 1 marcia 
    C_3(2,j)=M_N(2,j); %coppia costante 2 marcia 
    C_4(j,:)=30*P*1000./(pi*x4(j,:)); %coppia 2 marcia 

    ax1 = gca; 
    plot(ax1,[0,nN(1,j)],[C_1(1,j) C_1(1,j)],PL(1,j),'LineWidth',2/j^2) %I coppia costante 
    hold on 
    plot(ax1,x2(j,:),C_2(j,:),PL(2,j),'LineWidth',2/j^2) %coppia I 
    plot(ax1,[max(x2(j,:)),nN(2,j)],[C_3(2,j) C_3(2,j)],PL(1,j),'LineWidth',2/j^2) %II coppia costante 
    plot(ax1,x4(j,:),C_4(j,:),PL(2,j),'LineWidth',2/j^2) %coppia II 
    ylim([0 3500]) 
    ylabel(ax1,'Torque [Nm]'); %# Add a label to the left y axis 
    set(ax1,'Box','off');%# Turn off the box surrounding the whole axes 

    axesPosition = get(gca,'Position'); 
    ax2 = axes('Position',axesPosition,... 
    'YLim',[0 30],...   %# and a different scale 
    'XAxisLocation','top',... 
    'YAxisLocation','right',... 
    'Color','none',... 
    'XColor','b','YColor','b',... 
    'Box','off');    %# ... and no surrounding box 

    hold on 
    m=P./nN; %pendenza potenza 
    P_1(j,:)=m(1,j).*x1(j,:); %potenza 1 marcia 
    P_2(1,j)=P; %Potenza costante 1 marcia 
    P_3(j,:)=m(2,j).*x3(j,:); %Potenza 2 marcia 
    P_4(2,j)=P; %Potenza costante 2 marcia 

    plot(ax2,x1(j,:),P_1(j,:),'b--') 
    plot(ax2,[max(x1(j,:)),nmax(1,j)],[P P],'b--')  
    plot(ax2,x3(j,:),P_3(j,:),'b--') 
    plot(ax2,[max(x3(j,:)),nmax(2,j)],[P P],'b--') 
    ylabel(ax2,'Power [kW]'); 

    linkaxes([ax1 ax2],'x'); %lega tra di loro gli assi, 
    grid on 
    grid minor 
end 

어떻게 내가 당신이 원하는 플롯의 종류 plotyy를 사용해야합니다

답변

1

이유는 ax1 = gca을 사용하기 때문입니다. gca은 현재 축이며 첫 번째 반복을 마친 후 현재 축은 사용자가 마지막으로 계획 한 축이므로 두 번째 축입니다.

루프 전에 축 생성 ax1 = axes 추가하여 문제를 해결하고 ax1 현재 축된다 axes(ax1)되도록하여 ax1 = gca하기.

참고 : ax2을 두 번 입력하면 두 번 표시됩니다. 이것은 정확히 동일한 위치와 속성을 가진 두 개의 동일한 축이 있음을 의미합니다. 더 나은 실습은 for 루프 전에 모든 축 생성을 이동하는 것이고, 루프는 루프를 그 안에 플롯하기 위해서만 사용됩니다. 내가 루프 전에 다음 쓰기 이동합니다 :

ax1 = axes; 
hold on; 
ylim([0 3500]) 
ylabel(ax1,'Torque [Nm]'); %# Add a label to the left y axis 
set(ax1,'Box','off');%# Turn off the box surrounding the whole axes 

axesPosition = get(ax1,'Position'); 
ax2 = axes('Position',axesPosition,... 
    'YLim',[0 30],...   %# and a different scale 
    'XAxisLocation','top',... 
    'YAxisLocation','right',... 
    'Color','none',... 
    'XColor','b','YColor','b',... 
    'Box','off');    %# ... and no surrounding box 

hold on; 
ylabel(ax2,'Power [kW]'); 
linkaxes([ax1 ax2],'x'); %lega tra di loro gli assi, 
xlim([0,3800]); 

grid on 
grid minor 

및 루프가 지금은 그냥이 :

for j=1:2 %contatore stella-triangolo 
%   subplot(length(tau),1,j); 
%   figure 

    x1(j,:) = linspace(0,nN(1,j)); %numero di giri da 0 al ginocchio 1 
    x2(j,:) = linspace(nN(1,j),nmax(1,j)); %da ginocchio 1 a max 1 
    x3(j,:) = linspace(0,nN(2,j)); %da 0 a ginocchio 2 
    x4(j,:) = linspace(nN(2,j),nmax(2,j)); %da ginocchio 2 a max 2 

    C_1(1,j)=M_N(1,j); %coppia costante 1 marcia 
    C_2(j,:)=30*P*1000./(pi*x2(j,:)); %coppia 1 marcia 
    C_3(2,j)=M_N(2,j); %coppia costante 2 marcia 
    C_4(j,:)=30*P*1000./(pi*x4(j,:)); %coppia 2 marcia 

    plot(ax1,[0,nN(1,j)],[C_1(1,j) C_1(1,j)],PL(1,j),'LineWidth',2/j^2) %I coppia costante 
    plot(ax1,x2(j,:),C_2(j,:),PL(2,j),'LineWidth',2/j^2) %coppia I 
    plot(ax1,[max(x2(j,:)),nN(2,j)],[C_3(2,j) C_3(2,j)],PL(1,j),'LineWidth',2/j^2) %II coppia costante 
    plot(ax1,x4(j,:),C_4(j,:),PL(2,j),'LineWidth',2/j^2) %coppia II 

    m=P./nN; %pendenza potenza 
    P_1(j,:)=m(1,j).*x1(j,:); %potenza 1 marcia 
    P_2(1,j)=P; %Potenza costante 1 marcia 
    P_3(j,:)=m(2,j).*x3(j,:); %Potenza 2 marcia 
    P_4(2,j)=P; %Potenza costante 2 marcia 

    plot(ax2,x1(j,:),P_1(j,:),'b--') 
    plot(ax2,[max(x1(j,:)),nmax(1,j)],[P P],'b--')  
    plot(ax2,x3(j,:),P_3(j,:),'b--') 
    plot(ax2,[max(x3(j,:)),nmax(2,j)],[P P],'b--') 

end 
+0

맞아. 내가 해결 했어, 고마워. – Andrea

1

이전 R2016a에 같은 규모의 플롯 할 수 없습니다.

+0

문제가있는, 내가이 얻을 : http://imgur.com/a/ PV4Y7 잘못되었습니다. 데이터 커서가 x 축과 일치하지 않습니다. – Andrea

+0

재미 있고 재현 할 수 없습니다. 나는 데이터 커서 콜백이 잘못된 일을한다고 가정한다. 자신 만의 글을 쓸 수도 있습니다 .. 데이터 커서를 마우스 오른쪽 버튼으로 클릭하고 "텍스트 업데이트 기능 편집"을 선택하십시오. – souty

+0

Lior의 대답을 통해보다 즉각적인 결과를 얻을 수 있습니다. 나는 그의 대답에 대해 찬성표를 던질 것이다. – souty