Creare un grafico a partire da un testo txt

di il
8 risposte

Creare un grafico a partire da un testo txt

Salve a tutti,
il professore ci ha assegnato un esercizio in cui a partire da un testo di una matrice dobbiamo costruire il grafico.
Lui stesso ci ha impostato la lettura del testo su matlab con il comando dlmread.
L'esercizio chiede di mettere la prima colonna su l'asse delle ascisse e le altre colonne sulle ordinate ma in modo che ogni y su una stessa riga corrisponda alla stessa x.
Mi spiego, data questa matrice:
0 1 7
0.1 2 8
0.2 3 9
0.3 4 10
0.4 5 11
0.5 6 12

l'1 e il 7 (ordinate) devono stare in corrispondenza dello 0, così 2 e 8 in corrispondenza di 1, ecc
Come posso fare a costruire un grafico così?

8 Risposte

  • Re: Creare un grafico a partire da un testo txt

    Assumo che

    così 2 e 8 in corrispondenza di 1, ecc

    stia per

    così 2 e 8 in corrispondenza di 0.1, ecc

    Ciò detto, hai provato con la funzione "plot"?

  • Re: Creare un grafico a partire da un testo txt

    Ci ho pensato ma non so come si fa, mi spiego meglio:
    una volta che con la funzione dlmread leggo il testo, dopo devo creare due vettori, uno contenente le ascisse e l'altro le ordinata, e poi mettere questi vettori nella funzione plot?
    uso da poco matlab e ancora non ho ben capito come si usa...
  • Re: Creare un grafico a partire da un testo txt

    La funzione "dlmread" () legge il file in input e ritorna i valori letti in una matrice.

    La prima colonna della matrice contiene i valori della prima colonna del file di input ecc.

    Avendo:
    
    M=dlmread('input_file.txt')
    
    Avrai le ascisse nella prima colonna di "M", e le ordinate delle due curve nelle colonne 2 e 3.

    Di conseguenza:
    
    % Lettura dati di input
    M=dlmread('input_file.txt')
    % Plot della prima curva
    plot(M(:,1),M(:,2))
    % Plot della seconda curva
    hold on
    plot(M(:,1),M(:,3))
    grid on
    
    La notazione "M(:1)" (e le altre simili), significa: tutte le righe (:) della prima (1) colonna.
  • Re: Creare un grafico a partire da un testo txt

    No scusami, non mi sono spiegato allora
    si tratta di un solo grafico, quindi ci sono più ordinate per un solo valore di ascissa
    come si fa in questo caso?
  • Re: Creare un grafico a partire da un testo txt

    Ok, forse ho capito
    ripeto il procedimento che mi hai mostrato per tutte le volte che mi serve, poi imposto lo stesso colore e mi viene come se fosse un solo grafico
    secondo te va bene?
  • Re: Creare un grafico a partire da un testo txt

    Nell'esempio che ti ho proposto prima, vengono plottate le due curve che corrispondono alle colonne 2 e 3 dei dati di esempio che hai inserito nella prima domanda:
    
    0 1 7
    0.1 2 8
    0.2 3 9 
    0.3 4 10
    0.4 5 11
    0.5 6 12
    
    Nota che ho modificato il codice inserendo l'istruzione "hold on" per consentire di avere più curve in un solo grafico.

    Se hai più curve, se, cioè il tuo file di inupt ha più colonne, puoi usare un ciclo "for" per effettuare tutti i plottaggi.
    
    n_elem=size(M,2)
    color_set='rgbcy'
    axes
    hold on
    for i=2:n_elem
       plot(M(:,1),M(:,i),'color',color_set(i))
    end
    
    
    Nella prima domanda hai specificato che la prima colonna contiene le ascisse dei vari grafici; se così non è, se cioè il file di testo contiene solo le ordinate dei grafici, hai due possibilità:
    [*] non specificare i valori delle ascisse nella chiamata alla funzione "plot": ad esempio, per plottare la seconda colonna
    
    plot(M(:,2)
    
    [*] defnire le ascisse in funzione del numero di valori delle ordinate (il che è lo stesso del''opzione precedente, visto che in quel caso viene fatto automaticamente da MatAb:
    
    n_elem=size(M,2)
    plot([1:n_elem],M(:,2))
    
  • Re: Creare un grafico a partire da un testo txt

    Ho provato come mi hai detto ma essendo 5 colonne di cui la prima ascisse, mi dovrebbero uscire solo 4 grafici (che corrispondono ai restati valori di ordinate) invece me ne escono 5, poi mi da questo errore:

    Index exceeds matrix dimensions
  • Re: Creare un grafico a partire da un testo txt

    Mi dispiace, c'era un errore nel codice che ho inserito nella rispsota precedente; l'ho corretto, ma lo ripubblico di seguito, a scanso di equivoci.
    
    n_elem=size(M,2)
    color_set='rgbcy'
    axes
    hold on
    for i=2:n_elem
       plot(M(:,1),M(:,i),'color',color_set(i))
    end
    
Devi accedere o registrarti per scrivere nel forum
8 risposte