2011-04-21 13 views
5

Jak mogę utworzyć działki w MATLABie, jak w poniższym? 1D plot exampleJak tworzyć działki 1-D w programie MATLAB?

Nie będę potrzebować etykiet, więc możesz je zignorować. Próbowałem użyć normalnego wykresu 2D, podając parametr 0 do y dla każdego punktu danych. Pomaga, ale większość fabuły pozostaje pusta/biała i nie chcę tego. 1d plot in 2d figure

Jak mogę rozwiązać ten problem?

Edit:

To jak ja działka (gra z wartościami ylim nie pomóc):

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

Co próbujesz knuć? – jtpereyda

+0

Jeśli prawidłowo ustawisz parametr y na 0, problem "pusty/biały" może nie być spowodowany przez funkcję drukowania.Czy możesz podać więcej informacji i trochę kodu? – Pepe

+0

Pracuję nad dwu-klasowym algorytmem klasyfikacji płci. Zmniejszę wymiar do 1, korzystając z LAR (Linear Discriminant Analysis) i chcę je dobrze wykreślić. Mówiąc prosto, mam zestaw liczb, które chcę wydrukować na osi X. – kolistivra

Odpowiedz

5

Oto jeden sposób, aby odtworzyć swoją postać za pomocą dsxy2figxy i annotate. dsxy2figxy może być trudne do znalezienia po raz pierwszy, ponieważ nie jest to naprawdę na twojej drodze. Jest częścią pakietu MATLAB i jest dostarczana w przykładowych funkcjach. Możesz do niego dotrzeć, wyszukując go w dokumentach pomocy, a gdy go znajdziesz, otwórz go i zapisz w folderze na swojej ścieżce.

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') 

To będzie produkować następującą postać:

enter image description here

Jest to swego rodzaju hackish sposób to zrobić, jak już nabrać MATLAB do druku tylko jedno poletko. Wszystkie zrasteryzowane formaty (jpeg, png, itp.) Nie dadzą tego samego wyniku, ponieważ wszystkie wydrukują całą liczbę, w tym miejsce, w którym powinny znajdować się niezgłoszone wątki. Aby uzyskać ten efekt, musi to być eps i działa z nim, ponieważ eps używa dużo bardziej ograniczających ramek ... tak, że wszystkie bezsensowne spacje są przycinane. Możesz następnie przekonwertować to na dowolny inny format.

3

Ok więc najbliższa doszedłem do rozwiązywania tego jest następujący

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 

Krótko mówiąc, schowałem oryginalną oś i utworzyłem nową, umieszczoną na 0 oryginalnej osi, a ponieważ nie mogłem całkowicie usunąć osi Y, ustawiłem kolor na kolor tła rysunku. Możesz wtedy zdecydować, czy chcesz zagrać za pomocą znaczników na osi X.

Mam nadzieję, że to pomoże!

10

Jednym ze sposobów, aby to zrobić, jest dostosowanie właściwości osi, aby renderować w zasadzie pojedynczą linię. Oto przykład:

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 

I dostaniesz poniższy wykres:

enter image description here

-1

Bardzo naiwna sztuczka, ale przydatna.

Wykreśl w 2d za pomocą funkcji matlab plot. Następnie za pomocą właściwości edycji rysunku skompresuj go do dowolnej osi, na której chcesz wydrukować wykres 1D !! Nadzieję, że pomaga :)

Powiązane problemy