Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[Matlab] Aspect ratio grafici

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] [Matlab] Aspect ratio grafici

Messaggioda Foto UtentePepePepe » 28 giu 2022, 11:44

Buongiorno, sono un nuovo utente.

Sto lavorando in ambiente matlab ad un codice che fra le altre cose genera un abaco (credo non sia importante specificarlo, ma il contesto è quella della dinamica strutturale, in particolare gli spettri di risposta). Il grafico che devo produrre contiene delle rette inclinate a 45° rispetto l'asse delle ascisse. Entrambi gli assi cartesiani sono in scala logaritmica. Il problema che sto tendando di risolvere è quello di generare un grafico in cui le proporzioni fra i due assi siano tali da visualizzare le suddette rette esattamente a 45° (in altre parole, la singola "decade" deve avere la stessa lunghezza in entrambi gli assi). Al momento infatti il grafico viene generato con un aspect ratio che le fa sembrare inclinate di 60° circa. L'unica soluzione provvisoria che ho trovato è quella di specificare pbaspect a [sqrt(2) 1 1] ma è un valore approssimato trovato per tentativi. Vorrei capire invece se c'è modo di risolvere il problema in modo esatto. Spero di essere stato chiaro.

Grazie anticipatamente ;-)

P.S. Porzione di codice che genera il grafico:

Codice: Seleziona tutto
loglog(T0,D,'Linewidth', 0.5,'Color','black','linestyle','--')
grid on
xlabel 'T_0'
xticks([0.02 0.05 0.1 0.2 0.5 1 2 5 10 20 50])
xticklabels({'0.02','pi','-\pi','0','\pi','2\pi','3\pi'})
ylabel 'S_D'
xlim([0.02 50])
ylim([0.2 50])
pbaspect([sqrt(2) 1 1])
Avatar utente
Foto UtentePepePepe
10 2
 
Messaggi: 6
Iscritto il: 26 giu 2022, 13:08

1
voti

[2] Re: [Matlab] Aspect ratio grafici

Messaggioda Foto UtenteRenzoDF » 28 giu 2022, 14:07

Beh, basta che tu vada ad usare per l'asse x, ovvero per il primo parametro numerico di pbaspect il rapporto fra i logaritmi dei rapporti fra i limiti dei due intervalli, ovvero

Codice: Seleziona tutto
r=log10(50/0.02)/log10(50/0.2);
pbaspect([r 1 1])
"Il circuito ha sempre ragione" (Luigi Malesani)
Avatar utente
Foto UtenteRenzoDF
55,7k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 13168
Iscritto il: 4 ott 2008, 9:55

0
voti

[3] Re: [Matlab] Aspect ratio grafici

Messaggioda Foto UtentePepePepe » 28 giu 2022, 19:21

Ottimo, grazie! :ok:
Avatar utente
Foto UtentePepePepe
10 2
 
Messaggi: 6
Iscritto il: 26 giu 2022, 13:08

3
voti

[4] Re: [Matlab] Aspect ratio grafici

Messaggioda Foto Utenterugweri » 28 giu 2022, 21:53

Foto UtentePepePepe, intervengo solo per una piccola proposta: hai avuto la risposta che ti serviva, e va bene... ma hai voglia di ragionare un po' e magari spiegare qui sul forum perché quella risposta è giusta? ;-)

Non è un obbligo, nessuno ti impedisce di andartene via come fanno quasi tutti quelli che ottengono la risposta ai propri quesiti... ma se volessi farlo secondo me potrebbe esserti utile ;-)
Avatar utente
Foto Utenterugweri
5.948 2 8 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 1368
Iscritto il: 25 nov 2016, 18:46

2
voti

[5] Re: [Matlab] Aspect ratio grafici

Messaggioda Foto UtentePepePepe » 29 giu 2022, 18:37

Con piacere.

Il comando pbaspect consente di fissare il rapporto r fra la lunghezza degli assi in matlab (diciamo L_{x,\mathrm{matlab}} ed L_{y,\mathrm{matlab}}), ovvero la lunghezza dell'asse x rispetto all'asse y secondo la sintassi:

pbascpetc( [r 1 1] )

Volendo ottenere rette visualizzate a 45 gradi, serve che la lunghezza dell'intervallo tra due potenze del dieci consecutive sia uguale per entrambi gli assi o, in altre parole, è necessario che gli assi siano monometrici di modo che la lunghezza degli assi sia rappresentata con il medesimo fattore di scala u. Esso è dato dal rapporto fra la lunghezza numerica ("reale") dell'asse e la lunghezza che l'asse assume in visualizzazione grafico di matlab: u=L_{\mathrm{reale}}/L_{\mathrm{matlab}}.

Allora deve essere:

u_x = u_y \; \Rightarrow \; \frac{\log_{10}(50)-\log_{10}(0.02)}{L_{x,\mathrm{matlab}}} = \frac{\log_{10}(50)-\log_{10}(0.2)}{L_{y,\mathrm{matlab}}} \; \Rightarrow \; \frac{\log_{10}\frac{50}{0.02}}{L_{x,\mathrm{matlab}}} = \frac{\log_{10} \frac{50}{0.2}}{L_{y,\mathrm{matlab}}}

da cui:

\frac{L_{x,\mathrm{matlab}}}{L_{y,\mathrm{matlab}}} = \frac{\log_{10}\frac{50}{0.02}}{\log_{10}\frac{50}{0.2}} \equiv r

That's all!

P.S. Sicuramente c'è un modo più semplice di spiegarlo, ma per deformazione professionale, questo è come lo spiegherei io a qualcuno.
Avatar utente
Foto UtentePepePepe
10 2
 
Messaggi: 6
Iscritto il: 26 giu 2022, 13:08


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti