2014-12-09 3 views
5

Provare a cambiare i colori di un asse in un grafico matlab qui.Accesso alle proprietà degli oggetti grafici mediante la notazione dei punti nelle versioni Matlab anteriori a R2014b


Riferimento documentazione MATLAB: Matlab docs on setting axis properties

Codice frammento:

subplot('Position', [ left bottom (1/(cols*2)) (1/rows) ]); 
    ax = gca; 
    ax.Color = 'y'; 

Questo è tutto, ma una copia e incolla da l'esempio nella documentazione (qui):

enter image description here

Ma MATLAB getta un avvertimento e non cambia i colori degli assi per me:

Attenzione: Struct assegnazione campo sovrascrive un valore con classe "doppio". Vedere Note sulla versione di MATLAB R14SP2, Assegnazione della struttura Variabili come visualizzazione delle strutture Avvertenza, per i dettagli.

Ho provato ad assegnare un doppio, come dire 42.0, ma non mi è piaciuto affatto.

+1

Ho lo stesso errore sulla mia macchina. –

+1

try 'ax = handle (gca);' prima, quindi 'ax.Color = 'y';' – Hoki

+4

Stai usando R2014b o una versione precedente? – am304

risposta

14

Il messaggio di avviso sembra indicare che si sta utilizzando una versione anteriore a Matlab R2014b.

se è che, non si ha accesso alla notazione punto direttamente perché quando si fa ax=gca; si ottiene un valore di ritorno ax che sia di classe double. Il valore è l'ID dell'impugnatura dell'oggetto (l'asse corrente in questo caso) ma non l'handle stesso.

Quando si tenta ax.Color = 'y';, Matlab pensa che si desidera sovrascrivere il ax [double] con una variabile nuova ax che sarebbe una struttura, con il campo color, e lanciare un avvertimento.

È ancora possibile accedere alla notazione a punti per gli oggetti grafici e le proprietà, ma è necessario innanzitutto recuperare la maniglia reale dell'oggetto, utilizzando la funzione handle. Per esempio:

ax = handle(gca) ; %// the value "ax" returned is an `object`, not a `double` 

o anche su un riferimento esistente a una maniglia oggetto grafico:

ax = gca ; %// retrieve the `double` reference to the handle 
... 
ax = handle(ax) ; %// the value "ax" returned is an `object`, not a `double` 

dopo che si dovrebbe essere in grado di utilizzare la notazione punto per tutte le proprietà pubbliche dell'oggetto grafico. ax.Color = 'y'; dovrebbe essere valido

+0

Bella risposta! Non conoscevo la funzione 'handle'. Sembra ... maneggevole :-P –

+0

Ah! r2014a, è bizzarro, l'ho appena installato pochi giorni fa, ho pensato che fosse l'ultimo e il più grande. –

+1

@LuisMendo, abbastanza utile in alcuni casi, e anche più veloce se è necessario aggiornare un oggetto molto frequentemente. Se ti piace, prova 'ax = java (handle (gca))'. apre tutta una serie di possibilità ... anche se non documentate. – Hoki