2016-02-29 58 views
0

我想在Python或Matlab中繪製極座標網格上的多個滯後環(如下圖所示 - 從紙張中獲取)。我知道如何在matlab中使用極座標函數,但是我正在努力解決這個問題,特別是重新縮放滯後環以及如何定義rho,使每個循環出現在特定的角度。如何在Python/Matlab中繪製極座標網格上的多個遲滯循環?

enter image description here

+0

它看起來像有主軸與極座標網格和「八點八」和18個具有滯後環的副軸。 – Crowley

回答

1

如果你沒有在一個軸上依靠圖形。 假設我們有兩個矩陣HystXHystY包含N行,每行描述了i-滯後循環。

polar(0,1.5) % Hack to get 8 smaller 
hold on 
polar(1:0.1:2*pi(),abs(sin(1:0.1:2*pi()))) % Print the eight 
set(gcf,'units','centimeters') 
set(gca,'units','centimeters') 

AXpos=get(gca,'position') % axes position 
AXCentre=[AXpos(1)+0.5*AXpos(3);AXpos(2)+0.5*AXpos(4)]; 
Radius=min(AXpos(3:4)); 

N=18; % Number of hysteresis loops 

Theta=0:1/N:1-1/N; % distribute Theta evenly 
Theta=2*pi()*Theta; % distribute Theta in range of (0,2Pi) 

% coordinates of centres of minor axes relative to major axes centre. 
axX=2/3*Radius*cos(Theta); 
axY=2/3*Radius*sin(Theta); 

% align the reference centre with centre of major axes, compensate dimensions of minor axes 
axX=axX+AXCentre(1)-0.5; % -0.5 for axes with width/height = 1 
axY=axY+AXCentre(2)-0.5; 

for ii=1:N 
    MinorAX=axes('units','centimeters','position',[axX(ii),axY(ii),1,1]) 
    line=('xdata',HystX(ii,:),'ydata',HystY(ii,:),'parent',MinorAX(ii)) 
end 

set(MinorAX,'visible','off') %disappear minor axes; 

如果你想在一個座標軸你可以用這個例子擁有一切: 在我生成設置「磁滯回線」的第一部分,然後我繪製在極座標系「8」,最後我積滯後循環。 這是基於這樣一個事實,即polar圖在「真實,隱藏的軸」內創建「假軸」(set(gca,'visible','on')將顯示它們)。

close all;clear all;  % get rid off variables and figures 
N=12;      % number of hysteresis loops 
HystX=zeros(N,100);   % X-values for loops 
HystY=HystX;    % Y-values for loops 
TempH=2*pi()*[0:0.01:1]; % Base for loops' content 
TempV=2*pi()*[0:1/N:1-1/N]; % Phase lead to differ the loops; position of the loop in axes 
%% Calclate the loops' cooordinates 
for ii=1:N 
    for jj=1:101 
    HystX(ii,jj)=0.1*cos(TempH(jj)); 
    HystY(ii,jj)=0.1*sin(TempH(jj)+TempV(ii)); 
    end 
end 

%% Plot the content oi polar axes 
polar(0,2) 
hold on 
polar(TempH,abs(sin(TempH))) 
% set(gca,'visible','on') 

%% Plot the hysteresis loops. 
for ii=1:12 
    line('xdata',HystX(ii,:)+(1.5*cos(TempV(ii))),... 
     'ydata',HystY(ii,:)+(1.5*sin(TempV(ii)))) 
end