Main Content

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

allchild

Trova tutti i figli degli oggetti specificati.

ancestor

Trova il padre dell'oggetto dei grafici.

copyobj

Copia gli oggetti dei grafici.

delete

Elimina un oggetto.

findall

Trova tutti gli oggetti dei grafici, inclusi gli handle nascosti.

findobj

Trova gli handle degli oggetti che presentano i valori della proprietà specificati.

gca

Restituisce l'handle degli assi correnti.

gcf

Restituisce l'handle della figura corrente.

gco

Restituisce l'handle dell'oggetto corrente.

get

Effettua la query sui valori delle proprietà di un oggetto.

ishandle

È vero se il valore è un handle di un oggetto valido.

set

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.