2012-07-23 23 views
5

Tengo una trama de superficie que estoy tratando de hacer. x es un vector de 11 elementos, un vector de elementos de 300 y una matriz de elementos de 300 * 11.Matlab: la trama de superficie no funciona

cuando intento trazar así:

surf(x y z) 

parcela La superficie no se presenta. Los ejes están ahí pero no hay una gráfica de superficie. blank surface plot

Sin embargo, si por alguna razón hago un diagrama de la superficie de un subconjunto de la matriz de la siguiente manera:

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

entonces funciona y la trama se muestra arriba. working surface plot

Tan pronto como aumente el número entre corchetes a 32, deja de funcionar. Si cambio el rango de 2:32 entonces funciona, entonces no tiene nada que ver con los datos solo el tamaño de las matrices.

¿Qué está pasando aquí? ¿Cómo lo arreglo?

P.S Adjuntaré el código pero es un poco largo y complejo, e importa archivos .txt para cargar en los vectores xey.

+0

¿Hay algún texto en rojo en la ventana de comandos cuando intenta trazar utilizando el primer comando? – Jonas

+0

No, no hay texto en rojo – Eddy

+1

quizás pueda intentar cambiar la propiedad 'Renderer' de la figura ('pintores',' zbuffer', 'OpenGL'): http://www.mathworks.nl/help/techdoc/ ref/figure_props.html – catchmeifyoutry

Respuesta

6

A veces, puede ayudar a cambiar el renderizador de figuras de Matlab, que es básicamente el backend que realiza el dibujo. Las opciones son painters, zbuffer y OpenGL.

Dado que es una figura característica, se puede aplicar a una cifra específica, por ejemplo:

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

o actualizar el default figure properties (si siempre es necesario, se puede poner en su user-specific startup.m):

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

del mismo modo, para obtener el estado Procesador actual, utilice get en lugar de set:

get(gcf(), 'Renderer') 

Diferentes representadores tienen diferentes propiedades de rendimiento (p. OpenGL renderizador puede usar la aceleración de hardware, si es compatible), pero también diferentes caprichos (en mi experiencia, la captura de marcos usando getframe() funciona con algunos renderizadores mientras usa inicio de sesión de escritorio remoto, pero no todos). Si bien no conozco la razón exacta de su problema, puede ser una de estas rarezas extrañas, así que intente cambiar el procesador.

Desde el Renderer property documentation:

método de representación que se utiliza para la pantalla y la impresión. Selecciona el método utilizado para representar gráficos MATLAB. Las opciones son:

painters - El método de representación original utilizado por MATLAB es más rápido cuando la figura contiene solo objetos gráficos simples o pequeños.

zbuffer - MATLAB dibuja objetos gráficos de forma más rápida y precisa porque colorea objetos por píxel y MATLAB representa solo aquellos píxeles visibles en la escena (eliminando así los errores de clasificación de adelante hacia atrás). Tenga en cuenta que este método puede consumir mucha memoria del sistema si MATLAB muestra una escena compleja.

OpenGL - OpenGL es un procesador que está disponible en muchos sistemas informáticos. Este representador es generalmente más rápido que pintores o zbuffer y, en algunos casos, permite a MATLAB acceder al hardware de gráficos que está disponible en algunos sistemas.

1

Observa el cambio en los valores mínimo/máximo del eje a lo largo del lado izquierdo (eje y) y la parte superior (eje z). Creo que todavía está allí, pero es muy, muy pequeño.

Prueba a poner el eje después de esta manera: axis([6E-6 8E-6 9.2E14 10E14 0.96 1.06 -1 1])

Nota: el E-6 podría ser E-8, que realmente no puedo decir de la imagen ...

Esto se basa apagado el código de: axis([xmin xmax ymin ymax zmin zmax cmin cmax])

Cuestiones relacionadas