2012-07-23 11 views
5

Ho una trama di superficie che sto cercando di fare. x è un vettore di 11 elementi, un vettore di 300 elementi e una matrice di elementi 300 * 11.Matlab: trama di superficie non funzionante

quando provo a tracciare in questo modo:

surf(x y z) 

trama La superficie non si presenta. Gli assi ci sono ma non c'è trama di superficie. blank surface plot

Tuttavia, se per qualche motivo che faccio una trama superficiale di un sottoinsieme della matrice in questo modo:

surf(x y(1:31) z(1:31,:)) 

allora funziona e la trama si presenta. working surface plot

Non appena aumento il numero tra parentesi a 32, smette di funzionare. Se cambio l'intervallo da 2:32 allora funziona, quindi non ha nulla a che fare con i dati solo la dimensione delle matrici.

Cosa sta succedendo qui? Come lo aggiusto?

P.S Collegherei il codice ma è un po 'lungo e complesso e importa file .txt da caricare nei vettori xey.

+0

C'è qualche testo rosso nella finestra di comando quando si tenta di tracciare utilizzando il primo comando? – Jonas

+0

No, niente testo rosso in assoluto – Eddy

+1

forse puoi provare a cambiare la proprietà 'Renderer' della figura ('painters',' zbuffer', 'OpenGL'): http://www.mathworks.nl/help/techdoc/ ref/figure_props.html – catchmeifyoutry

risposta

6

A volte può essere utile cambiare il rendering di figure di Matlab, che in pratica è il backend che esegue il disegno. Le opzioni sono painters, zbuffer e OpenGL.

Poiché si tratta di una proprietà di figura, è possibile applicare a una figura specifica, ad esempio:

set(gcf(), 'Renderer', 'painters') 

o aggiornare il default figure properties (se sempre necessario, si potrebbe mettere nel vostro user-specific startup.m):

set(0, 'Renderer', 'painters') 

Analogamente, per ottenere lo stato di rendering corrente, utilizzare get anziché set:

get(gcf(), 'Renderer') 

I diversi renderer hanno proprietà di rendimento diverse (ad es. Il riproduttore OpenGL può utilizzare l'accelerazione hardware, se supportato), ma anche diversi aspetti (nella mia esperienza, l'acquisizione di frame usando getframe() funziona con alcuni renderer mentre si utilizza l'accesso al desktop remoto, ma non tutti). Anche se non conosco il motivo esatto per il tuo problema, potrebbe trattarsi di uno di questi strani capricci, quindi prova a cambiare il renderer.

Dal Renderer property documentation:

metodo di rendering utilizzato per lo schermo e la stampa. Seleziona il metodo utilizzato per il rendering di grafica MATLAB. Le opzioni disponibili sono:

painters - Il metodo di rendering originale utilizzato da MATLAB è più veloce quando la figura contiene solo oggetti grafici semplici o piccoli.

zbuffer - MATLAB disegna gli oggetti grafici in modo più rapido e accurato perché colora gli oggetti su base per pixel e MATLAB restituisce solo quei pixel che sono visibili nella scena (eliminando così errori di ordinamento fronte-retro). Si noti che questo metodo può consumare molta memoria di sistema se MATLAB sta visualizzando una scena complessa.

OpenGL - OpenGL è un renderer disponibile su molti sistemi di computer. Questo renderizzatore è generalmente più veloce di pittori o zbuffer e in alcuni casi consente a MATLAB di accedere all'hardware grafico disponibile su alcuni sistemi.

1

Osserva la variazione dei valori min/max dell'asse lungo il lato sinistro (asse y) e superiore (asse z). Penso che sia ancora lì, ma è solo molto molto piccolo.

Prova a impostare l'asse in seguito in questo modo: axis([6E-6 8E-6 9.2E14 10E14 0.96 1.06 -1 1])

Nota: E-6 potrebbe essere E-8, non posso davvero dire dall'immagine ...

Questo si basa off il codice di: axis([xmin xmax ymin ymax zmin zmax cmin cmax])

Problemi correlati