Plot con 2 assi Y e 2 assi X

di il
24 risposte

24 Risposte - Pagina 2

  • Re: Plot con 2 assi Y e 2 assi X

    Infatti, anche a me veniva così quando ho provato, con il titolo che esce fuori in alto. Però se allungo la finestra (quando non è a tutto schermo) si sistema più in basso. Forse c'è qualche funzione per impostare l'altezza della figura che ti può risolvere la cosa senza mettere troppo le mani sul codice.
  • Re: Plot con 2 assi Y e 2 assi X

    Ci sono quasi!
    è venuta come in figura ci sono solo due cose da sistemare:

    1) la notazione scientifica sugli assi secondari (che tra l'altro è invertita perchè quella dell'asse x spunta in basso [vedi x10^21] e quella di y in alto)
    se uso l'istruzione
    set(gca, 'YTickLabel', num2str(get(gca,'YTick')','%d'))
    corregge il problema ma i numeri hanno troppi zeri.
    L'ho fatto solo per l'asse y

    2) si può rendere l'asse secondario dinamico? cioè se ingrandisco la figura come faccio a ridimensionarlo correttamente? è un pò incasinato...


    P.S.: Mi sono dimanticato prima che lavorando con due monitor salva tutto lo schermo e non so perchè ho salvato la schermata e non il plot... chiedo scusa
    Allegati:
    9724_1a6d20f73395c7de59c030a6583787e1.jpg
    9724_1a6d20f73395c7de59c030a6583787e1.jpg
  • Re: Plot con 2 assi Y e 2 assi X

    1) Non capisco cosa intendi dire. Senza aggiungere altre istruzioni, sull'asse secondario usa la stessa notazione che sugli assi primari.
    Ho fatto una prova con questo codice:
    x=1:10;
    y=1:10;
    figure();plot(x,y)
    set(gca,'Box','off');   % Turn off the box surrounding the whole axes
    axesPosition = get(gca,'Position');          %# Get the current axes position
    hNewAxes = axes('Position',axesPosition,...  %# Place a new axes on top...
                    'Color','none',...           %#   ... with no background color
                    'YAxisLocation','right',...  %#   ... located on the right
                    'Xtick', [],...              %#   ... with no y tick marks
                    'Box','off',...
                    'YLim', [10^23 10*10^23]);
    Vuoi che venga rappresentato diversamente?

    2) Non capisco cosa intendi dire... Se ingrandisco la figura mi mantiene le stesse tacche di quella più piccola, solo che le distanzia di più. Cosa vorresti?
  • Re: Plot con 2 assi Y e 2 assi X

    1) vorrei che li scrivesse senza fare casini...
    ora provo a vedere con il tuo codice.


    2) vedi il box bianco? vorrei che gli assi secondari si ridimensionassero contornandolo tutto.

    è più lunga sta cosa del plot che la parte di calcolo.... o_O
  • Re: Plot con 2 assi Y e 2 assi X

    Ecco, il tuo codice se lo scrivi per l'asse x secondario mette l'esponenziale (x10^23) in basso, allafine dell'assex principale.
    Era quello checercavo di dire prima
    Per l'asse y può andare bene dove lo mette, ma non per x
  • Re: Plot con 2 assi Y e 2 assi X

    Ma i numeri sono corretti? o sta proprio invertendo i due assi? (mette sopra quello principale e sotto quello secondario?)
  • Re: Plot con 2 assi Y e 2 assi X

    I numeri sono corretti, è l'esponente che è a popò
  • Re: Plot con 2 assi Y e 2 assi X

    Ho più o meno risolto mettento insieme le istruzioni per i due assi.
    Se ingrandisco la finestra del plot devo sistemare un pò di cose manualmente ma almeno non si incasina come prima.
    il codice è
    %Label 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 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);
    
    %%%% doppi Assi
    
    %set secondary x limit as the momentum of a H+ at distance equal to the MCP radius
    mv_max = (q*B*LB*L)/Rmcp;
    
    %set secondary y limit as the energy of a H+ at distance equal to the MCP radius
    Le = 0.07; %Estensione del C.E.  : 70 mm
    E = 100000; %campo TP.m
    Ekin_max = (q*E*Le*L)/(2*m_H*Rmcp);
    
    %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', 'normalized',...
                    'ActivePositionProperty', 'Position',... %prova anche OuterPosition - ma sembra peggio
                    'Color','none',...           %#   ... with no background color
                    'YAxisLocation', 'right',...
                    'XAxisLocation','top',...    %#   ... located on the top
                    'Ylim', [0, Ekin_max],...      
                    '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
                ylabel(hNewAxes,'Energy (H^+)');  %# Add a label to the right axis
    set(gca, 'XTickLabel', num2str(get(gca,'XTick')','%g')) 
    set(gca, 'YTickLabel', num2str(get(gca,'YTick')','%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']);
                
  • Re: Plot con 2 assi Y e 2 assi X

    Bene!
  • Re: Plot con 2 assi Y e 2 assi X

    Sì, buono così, ci ho perso troppo tempo per gli assi, ora basta.
    Devo riorganizzare il codice perchè adesso fa calcoli per diversi tipi di ioni e voglio mettere degli if-esle per non fargli fare 8 plot ogni volta che giro il programma, ma solo quello relativo allo ione che mi interessa.
    (dovrebbe essere abbastanza semplice)
Devi accedere o registrarti per scrivere nel forum
24 risposte