Utilizzo degli oggetti dei grafici
Oggetti dei grafici
Gli oggetti dei grafici sono gli elementi di base utilizzati per la visualizzazione dei grafici. Questi oggetti sono organizzati in una gerarchia, come illustrato nel seguente diagramma.
Quando si richiama una funzione di plottaggio, MATLAB® crea il grafico utilizzando diversi oggetti, come una finestra figura, assi, linee, testo e così via. Ogni oggetto dispone di un insieme fisso di proprietà, utilizzabili per controllare il comportamento e l'aspetto del grafico.
Ad esempio, la dichiarazione seguente crea un grafico a barre dai dati nella variabile y e imposta le proprietà relative all'aspetto del grafico:
y = [75 91 105 123.5 131 150 179 203 226 249 281.5]; bar(y,'FaceColor','green','EdgeColor','black','LineWidth',1.5)
Oggetti dei grafici più diffusi
Quando si richiama una funzione per creare un grafico, MATLAB crea una gerarchia degli oggetti dei grafici. Ad esempio, richiamando la funzione plot
si creano i seguenti oggetti di grafica:
Figura: finestra che contiene assi, barre degli strumenti, menu e altro ancora.
Assi: il sistema di coordinate che contiene l'oggetto di rappresentazione dei dati
Linea: linee che rappresentano il valore dei dati trasmessi alla funzione
plot
.Testo: etichette dei contrassegni delle tacche degli assi, con titoli e annotazioni opzionali.
Tipi di grafici diversi utilizzano oggetti diversi per rappresentare i dati. Poiché esistono diversi tipi di grafici, vi sono molti tipi di oggetti di dati. Alcuni sono di tipo generico, come linee e rettangoli, mentre altri sono estremamente specifici, come barre degli errori, barre dei colori e legende.
Accesso alle proprietà degli oggetti
Le funzioni di plottaggio possono restituire gli oggetti utilizzati per la creazione del grafico. Ad esempio, le seguenti dichiarazioni creano un grafico e restituiscono l'oggetto linea creato dalla funzione plot
:
x = 1:10; y = x.^3; h = plot(x,y);
Utilizzare h
per impostare le proprietà dell'oggetto linea. Ad esempio, impostare la sua proprietà Color
.
h.Color = 'red';
Quando si richiama la funzione di plottaggio è possibile specificare anche le proprietà della linea.
h = plot(x,y,'Color','red');
È possibile effettuare la query delle proprietà della linea per visualizzare il valore corrente:
h.LineWidth
ans = 0.5000
Ricerca delle proprietà di un oggetto
Per visualizzare le proprietà di un oggetto digitare:
get(h)
MATLAB restituisce un elenco delle proprietà dell'oggetto con i valori correnti.
Per visualizzare le proprietà di un oggetto con informazioni sui valori possibili, digitare:
set(h)
Impostazione delle proprietà degli oggetti
È possibile impostare contemporaneamente più proprietà con la funzione set
.
Impostazione delle proprietà di oggetti esistenti
Per impostare la stessa proprietà sullo stesso valore per più oggetti, utilizzare la funzione set
.
Ad esempio, le dichiarazioni seguenti tracciano una matrice 5x5 (creando cinque oggetti linea, uno per colonna), quindi impostano la proprietà Marker
su quadrato e la proprietà MarkerFaceColor
su verde.
y = magic(5); h = plot(y); set(h,'Marker','s','MarkerFaceColor','g')
In questo caso, h
è un vettore con cinque handle, uno per ciascuna delle cinque linee del grafico. La dichiarazione set
imposta sullo stesso valore le proprietà Marker
e MarkerFaceColor
di tutte le linee.
Per impostare il valore di una proprietà di un oggetto, effettuare l'indicizzazione nell'array dell'handle:
h(1).LineWidth = 2;
Impostazione di più valori per le proprietà
Per impostare le proprietà di ciascuna linea su un valore diverso, utilizzare gli array di celle per memorizzare tutti i dati e trasmetterli al comando set
. Ad esempio, creare un grafico e salvare gli handle delle linee:
figure y = magic(5); h = plot(y);
Si supponga di voler aggiungere marcatori diversi per ogni linea e di voler utilizzare lo stesso colore per il marcatore e la rispettiva linea. Occorre definire due array di celle: uno con i nomi delle proprietà e uno con i valori desiderati delle proprietà.
L'array di celle prop_name
contiene due elementi:
prop_name(1) = {'Marker'}; prop_name(2) = {'MarkerFaceColor'};
L'array di celle prop_values
contiene 10 valori: cinque valori per la proprietà Marker
e cinque valori per la proprietà MarkerFaceColor
. Si noti che prop_values
è un array di celle bidimensionale. La prima dimensione indica a quale handle in h
applicare il valore, mentre la seconda dimensione indica la proprietà a cui è assegnato il valore:
prop_values(1,1) = {'s'}; prop_values(1,2) = {h(1).Color}; prop_values(2,1) = {'d'}; prop_values(2,2) = {h(2).Color}; prop_values(3,1) = {'o'}; prop_values(3,2) = {h(3).Color}; prop_values(4,1) = {'p'}; prop_values(4,2) = {h(4).Color}; prop_values(5,1) = {'h'}; prop_values(5,2) = {h(5).Color};
A MarkerFaceColor
è sempre assegnato il valore del colore della linea corrispondente, ottenuta richiamando la proprietà Color
della linea.
Dopo aver definito gli array di celle, richiamare set
per specificare i nuovi valori della proprietà:
set(h,prop_name,prop_values)
Funzioni per lavorare con gli oggetti
Questa tabella elenca le funzioni comunemente utilizzate quando si lavora con gli oggetti.
Funzione | Scopo |
---|---|
Trova tutti i figli degli oggetti specificati. | |
Trova il padre dell'oggetto dei grafici. | |
Copia gli oggetti dei grafici. | |
Elimina un oggetto. | |
Trova tutti gli oggetti dei grafici, inclusi gli handle nascosti. | |
Trova gli handle degli oggetti che presentano i valori della proprietà specificati. | |
Restituisce l'handle degli assi correnti. | |
Restituisce l'handle della figura corrente. | |
Restituisce l'handle dell'oggetto corrente. | |
Effettua la query sui valori delle proprietà di un oggetto. | |
È vero se il valore è un handle di un oggetto valido. | |
Imposta i valori delle proprietà di un oggetto. |
Passaggio di argomenti
È possibile definire funzioni di plottaggio specifiche per semplificare la creazione di grafici personalizzati. Definendo una funzione si passano argomenti come le funzioni di plottaggio di MATLAB.
Il seguente esempio illustra una funzione di MATLAB che valuta un'espressione matematica rispetto al range specificato nell'argomento di input di x
, poi effettua il plottaggio dei risultati. Una seconda chiamata alla funzione plot
effettua il plottaggio del valore mean
dei risultati sotto forma di una linea rossa.
La funzione modifica le tacche dell'asse y in base ai valori calcolati. Le etichette dell'asse e un titolo completano il grafico personalizzato.
function plotFunc(x) y = 1.5*cos(x) + 6*exp(-.1*x) + exp(.07*x).*sin(3*x); ym = mean(y); hfig = figure('Name','Function and Mean'); hax = axes('Parent',hfig); plot(hax,x,y) hold on plot(hax,[min(x) max(x)],[ym ym],'Color','red') hold off ylab = hax.YTick; new_ylab = sort([ylab, ym]); hax.YTick = new_ylab; title ('y = 1.5cos(x) + 6e^{-0.1x} + e^{0.07x}sin(3x)') xlabel('X Axis') ylabel('Y Axis') end
L'esempio definisce un valore per l'argomento di input e richiama la funzione.
x = -10:.005:40; plotFunc(x)
Ricerca degli handle di oggetti esistenti
La funzione findobj
consente di ottenere gli handle degli oggetti dei grafici tramite la ricerca di oggetti con determinati valori delle proprietà. Con findobj
è possibile specificare i valori di qualsiasi combinazione di proprietà, semplificando la scelta di un oggetto tra tanti. findobj
riconosce inoltre le espressioni regolari.
Ricerca di tutti gli oggetti di un determinato tipo
Poiché tutti gli oggetti presentano una proprietà Type
che ne identifica il tipo, è possibile trovare gli handle di tutte le occorrenze di un determinato tipo di oggetto. Ad esempio,
h = findobj('Type','patch');
trova gli handle di tutti gli oggetti patch.
Ricerca di oggetti con una determinata proprietà
È possibile specificare più proprietà per limitare la portata della ricerca. Ad esempio,
plot(rand(5),'r:') h = findobj('Type','line','Color','r','LineStyle',':');
trova gli handle di tutte le linee rosse punteggiate.
h = 5x1 Line array: Line Line Line Line Line
Limitazione della portata della ricerca
È possibile specificare il punto iniziale nella gerarchia degli oggetti passando l'handle della figura o degli assi iniziali come primo argomento. Ad esempio,
h = findobj(gca,'Type','text','String','\pi/2');
trova n/2 solo nell'ambito degli assi correnti.