2012-01-24 2 views
0

Мне нужно построить некоторые данные, и мне нужны две оси x и y. Основные x и y дают мне информацию о перемещении, вторичную (x сверху и y справа) дают мне информацию об энергии. Проблема заключается в том, что если я сделаю окно графика больше, вторичные оси не изменяются правильно и, но это очень незначительно, заголовок сюжета записывается под панелью инструментов, и я вижу только нижнюю часть букв , Кто-то знает, как исправить основную проблему на вторичных осях?График с несколькими осями

Код я использовал для вторичной оси:

figure(1) 

%%%%voglio fare un plot tenendo fisse le dimensioni delle icone nella legenda 
hplot = plot(yH(1,:),xH(1,:),'^', yC(:,1),xC(:,1),'*',yC(:,2),xC(:,2),'*',... 
    yC(:,3),xC(:,3),'*',yC(:,4),xC(:,4),'*',yC(:,5),xC(:,5),'*',... 
    yC(:,6),xC(:,6),'*','MarkerSize',s); % Markersize: specifys the size of the marker in points (s in questo caso) 
hold on 
plot(Ymcporigine,Xmcporigine,'k-','MarkerEdgeColor','k','MarkerSize',1); %Plot contorno MCP 
hold on 
plot(Yh, Xh, 'b-', 'MarkerSize', s); %Plot alone circolare 
hold off 

%Labe assi principali - It is necessary to give the label instructions after plot in order to avoid overlap 
xlabel(gca, 'Deflessione magnetica [m]'); % label lower x axis 
ylabel(gca,'Deflessione elettrica [m]'); %label left y axis 

%particles outside MCP radius won't be appear in figure 
xlim([0, Rmcp]) 
ylim([0, Rmcp]) 

%%%% legenda assi principali 
l=legend(hplot, 'H^+','C^+','C^{+2}','C^{+3}','C^{+4}','C^{+5}','C^{+6}', 'Location','BestOutside'); 
a=get(l,'children'); 
set(a(1:3:end),'MarkerSize',10); 


%%%% doppio Asse x 
%xlabel(gca, 'Deflessione magnetica [m]'); % label asse x principale 

%set secondary x limit as the momentum of a H+ at distance equal to the MCP radius 
% Secondo Harres y=(q*B*LB*L)/sqrt(2mEkin) ==> mv=q*B*LB*L/y 
mv_max = (q*B*LB*L)/Rmcp; 
%mv_max = 1; 

%Layout instruction 
set(gca,'Box','off'); % Turn off the box surrounding the whole axes 
axesUnits=get(gca,'Units'); 
axesPosition = get(gca,'Position');   %# Get the current axes position 
hNewAxes = axes('Position',axesPosition,... %# Place a new axes on top... 
       'Units', axesUnits,... 
       'ActivePositionProperty', 'OuterPosition',... 
       'Color','none',...   %# ... with no background color 
       'XAxisLocation','top',... %# ... located on the top 
       'Ytick', [],...    %# ... with no y tick marks 
       'Xlim', [0, mv_max],...  %# ... should define x axis scale (need to set xmax = mv_max) 
       'Box','off');    %# ... and no surrounding box 

      xlabel(hNewAxes,'Momentum (H^+)'); %# Add a label to the top axis 
set(gca, 'XTickLabel', num2str(get(gca,'XTick')','%g')) 

%%%%%Plot title - It is necessary to give the title instruction after secondary x axis in order to avoid overlap   
title(['Calcolo approssimato interazione ioni campo magnetico B=', num2str(B), 'Tesla']); 

%%%% doppio Asse y    
%ylabel(gca,'Deflessione elettrica [m]'); %label asse y principale 

%set secondary y limit as the energy of a H+ at distance equal to the MCP radius 
% Secondo Harres x=(q*E*Le*L)/(2mEkin) ==> Ekin=q*E*Le*L/2mx 
Le = 0.07; %Estensione del C.E. : 70 mm 
E = 100000; %campo TP.m 
Ekin_max = (q*E*Le*L)/(2*m_H*Rmcp); 
%mv_max = 1; 

set(gca,'Box','off'); % Turn off the box surrounding the whole axes 
axesUnits = get(gca,'Units'); 
axesPosition = get(gca,'Position');   %# Get the current axes position 
hNewAxes = axes('Position',axesPosition,... %# Place a new axes on top... 
       'Units', 'normalized',... 
       'ActivePositionProperty', 'OuterPosition',... 
       'Color','none',...   %# ... with no background color 
       'YAxisLocation','right',... %# ... located on the right 
       'Ylim', [0, Ekin_max],... %# ... should define y axis scale (need to set ymax=Ekin_max) 
       'Xtick', [],...    %# ... with no y tick marks 
       'Box','off');    %# ... and no surrounding box 

      ylabel(hNewAxes,'Energy (H^+)'); %# Add a label to the top axis 
set(gca, 'YTickLabel', num2str(get(gca,'YTick')','%g')) 
+0

Есть ли вероятность получить полный код для воспроизведения проблемы? –

+0

ОК, код Я опубликовал код, который я использовал для всего участка. Если вам нужна часть, в которой она делает исчисление для переменных, которые я могу предоставить. – user1167516

ответ

0

Из документов Matlab это выглядит, как вы должны установить ActivePositionProperty в OuterPosition вместо Position. Я не могу воспроизвести проблему масштабирования, но настройка, похоже, изменит положение заголовка.

+0

Я использовал «OuterPosition», и когда я делаю окно больше, название опускается, но мне нужно организовать вторичные оси, потому что они немного перепутаны. – user1167516

1

Я помню, как видел это walkthrough on how to set up multiple axes в документации Matlab. Я попробовал их образец кода, и все изменилось отлично.

Где ваш код отличается от документации Matlab, заключается в том, что вам необходимо определить ось x и ось y одновременно, а не в двух разных операторах новой оси. Так что берите ваши два hNewAxes заявления и заменить его на тот, который включает в себя все свойства:

hNewAxes = axes('Position',axesPosition,... %# Place a new axes on top... 
      'Units', 'normalized',... 
      'ActivePositionProperty', 'OuterPosition',... 
      'Color','none',...   %# ... with no background color 
      'YAxisLocation','right',... %# ... located on the right 
      'XAxisLocation','top',... 
      'Xlim', [0, mv_max],... 
      'Ylim', [0, Ekin_max],... %# ... should define y axis scale (need to set ymax=Ekin_max) 
      'Box','off');    %# ... and no surrounding box 

Если вы хотите построить некоторые из ваших линий передачи данных, в отношении одного набора осей, а некоторые по отношению ко второму , то для второго набора вы должны будете построить их в стиле, изложенных в конце пошаговом:

hl2 = line(x2,y2,'Color','k','Parent',ax2); 

где свойство «родитель» говорит Matlab, какие оси использовать.

+0

Я не могу получить разницу между этим образцом и моим кодом, за исключением того, что у меня есть больше инструкций ... извините, но я новичок в программировании. – user1167516

+0

Это почти сделано. У меня все еще есть проблема с изменением размера, но в списке проще изменить размер вручную – user1167516