2011-04-21 16 views
5

¿Cómo puedo hacer parcelas en MATLAB como en la siguiente? 1D plot example¿Cómo hacer parcelas en 1-D en MATLAB?

No necesitaré etiquetas, por lo que puede ignorarlas. Intenté usar el gráfico 2D normal, dando 0 a parámetro y para cada punto de datos. Sí ayuda, pero la mayor parte de la trama permanece vacía/blanca y no quiero eso. 1d plot in 2d figure

¿Cómo puedo resolver este problema?

Editar:

Así es como me parcela (jugando con los valores de ylim no ayuda):

hold on 
for i=1:120 
    if genders(v_labels(i)) == CLASS_WOMAN 
     plot(v_images_lda(i,:) * w_lda,0,'r*'); 
    else 
     plot(v_images_lda(i,:) * w_lda,0,'b.'); 
    end 
end 
title('LDA 1D Plot'); 
ylim([-0.2 0.2]); 
hold off 
+0

¿Qué tratas de trazar? – jtpereyda

+0

Si está configurando correctamente el parámetro y en 0, su problema de "vacío/blanco" podría no ser causado por la función de trazado.¿Puedes proporcionar más información y algunos códigos? – Pepe

+0

Estoy trabajando en un algoritmo de clasificación de género de dos clases. Disminuyo la dimensión a 1 usando el análisis discriminante lineal (LDA) y quiero trazarlo muy bien. En pocas palabras, tengo un conjunto de números que quiero trazar en el eje X. – kolistivra

Respuesta

5

aquí es una manera de reproducir su figura usando dsxy2figxy y annotate. dsxy2figxy puede ser difícil de encontrar la primera vez, ya que no está realmente en su camino. Es parte del paquete MATLAB y se proporciona en las funciones de ejemplo. Puede localizarlo buscándolo en los documentos de ayuda y una vez que lo encuentre, ábralo y guárdelo en una carpeta en su camino.

h1=figure(1);clf 
subplot(4,1,1); 
hold on 
xlim([0.2,1]);ylim([-1,1]) 

%arrow 
[arrowX,arrowY]=dsxy2figxy([0.2,1],[0,0]); 
annotation('arrow',arrowX,arrowY) 

%crosses 
x=[0.3,0.4,0.6,0.7,0.75]; 
plot(x,0,'kx','markersize',10) 

%pipes 
p=[0.5,0.65]; 
text(p,[0,0],'$$\vert$$','interpreter','latex') 

%text 
text([0.25,0.5,0.65],[1,-1,-1]/2,{'$$d_i$$','E[d]','$$\theta$$'},'interpreter','latex') 

axis off 
print('-depsc','arrowFigure') 

Esto producirá la siguiente figura:

enter image description here

Esta es una especie de una manera hacker para hacerlo, como he engañado MATLAB en la impresión de una sola trama secundaria. Todos los formatos rasterizados (jpeg, png, etc.) no le darán el mismo resultado, ya que todos imprimirán la figura completa, incluyendo dónde deberían haber estado las subparcelas no declaradas. Entonces, para obtener este efecto, tiene que ser un eps, y funciona con él porque eps usa cuadros de delimitación mucho más ajustados ... por lo que se recortan todos los espacios en blanco sin sentido. A continuación, puede convertir esto a cualquier otro formato que desee.

3

Ok por lo que lo más cerca que he llegado a la solución de este es la siguiente

hax = gca(); 
hold on 
for i=1:120 
    if genders(v_labels(i)) == CLASS_WOMAN 
     plot(v_images_lda(i,:) * w_lda,0,'r*'); 
    else 
     plot(v_images_lda(i,:) * w_lda,0,'b.'); 
    end 
end 

set(hax, 'visible', 'off'); 
hax2 = axes(); 
set(hax2, 'color', 'none', 'ytick', [], 'ycolor', get(gcf, 'color'); 
pos = get(hax, 'position'); 
set(hax2, 'position', [pos(1), pos(2)+0.5*pos(4), pos(3), 0.5*pos(4)]); 
title('LDA 1D Plot'); 

hold off 

En resumen, oculté el eje original y creé uno nuevo ubicado en 0 del eje original, y como no pude eliminar completamente el eje y, configuré su color con el color de fondo de la figura. A continuación, puede decidir si también desea jugar con las marcas del eje x.

Espero que esto ayude!

10

Una forma de hacer esto sería ajustar las propiedades 'XLim', 'YLim' y 'DataAspectRatio' de los ejes para que se muestre como una sola línea esencialmente. He aquí un ejemplo:

data1 = rand(1,20)./2;  %# Sample data set 1 
data2 = 0.3+rand(1,20)./2; %# Sample data set 2 
hAxes = axes('NextPlot','add',...   %# Add subsequent plots to the axes, 
      'DataAspectRatio',[1 1 1],... %# match the scaling of each axis, 
      'XLim',[0 1],...    %# set the x axis limit, 
      'YLim',[0 eps],...    %# set the y axis limit (tiny!), 
      'Color','none');    %# and don't use a background color 
plot(data1,0,'r*','MarkerSize',10); %# Plot data set 1 
plot(data2,0,'b.','MarkerSize',10); %# Plot data set 2 

y obtendrá el siguiente diagrama:

enter image description here

-1

Truco muy ingenuo pero útil.

Gráfico en 2d usando la función de trazado de matlab. Luego, usando las propiedades de editar las figuras, comprímalas en cualquier eje en el que necesites una trama 1D. Espero que ayude :)

Cuestiones relacionadas