2011-04-21 11 views
5

아래와 같이 MATLAB에서 어떻게 플롯을 만들 수 있습니까? 1D plot exampleMATLAB에서 1 ​​차원 플롯을 만드는 방법은 무엇입니까?

레이블이 필요하지 않으므로 무시할 수 있습니다. 나는 각 데이터 포인트에 대해 y 매개 변수에 0을 부여하여 일반 2D 플롯을 사용하려고했습니다. 그것은 도움이된다. 그러나 음모의 대부분은 비어있는 채로 남아있다. 그리고 나는 그것을 원하지 않는다. 1d plot in 2d figure

이 문제를 어떻게 해결할 수 있습니까?

편집 :

I 음모 (도움이되지 않습니다 ylim의 값으로 재생하는) 방법이 있습니다 :

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

무엇을하려하고 있습니까? – jtpereyda

+0

y 매개 변수를 0으로 올바르게 설정하면 "빈/흰색"문제가 플로팅 기능에 의해 유발되지 않을 수 있습니다.더 많은 정보와 코드를 제공 할 수 있습니까? – Pepe

+0

두 가지 성별 분류 알고리즘을 연구 중입니다. 선형 판별 분석 (Linear Discriminant Analysis, LDA)을 사용하여 차원을 1로 줄이고 잘 계획하고 싶습니다. 간단히 말해서, 나는 X 축에 플롯 할 숫자들의 세트를 가지고있다. – kolistivra

답변

5

여기 dsxy2figxyannotate를 사용하여 그림을 재현하는 한 방법입니다. dsxy2figxy은 처음에는 찾기가 어려울 수 있습니다. 실제로 경로에 있지 않습니다. 이는 MATLAB 패키지의 일부이며 예제 함수에서 제공됩니다. 도움말 문서에서 해당 항목을 검색하여 찾은 다음 열어 경로의 폴더에 저장하면됩니다.

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

는 다음 그림을 생성합니다 : 그냥 하나의 부가 적 줄거리 인쇄에 MATLAB을 속였다 한대로

enter image description here

이, 그것을 할 수있는 hackish 방법의 일종이다. 모든 래스터 화 형식 (jpeg, png 등)은 선언되지 않은 서브 그림이 있어야하는 위치를 포함하여 전체 그림을 모두 인쇄하기 때문에 동일한 결과를 제공하지 않습니다. 따라서이 효과를 얻으려면 eps이어야하며 eps는 더 엄격한 경계 상자를 사용하므로 모든 의미없는 공백이 제거됩니다. 그런 다음 원하는 형식으로 변환 할 수 있습니다.

3

확인

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 
을 따르고 내가 이것을 해결에 온 가장 가까운 그래서

즉, 원래 축을 숨기고 원래 축 0에 위치하는 새 축을 만들었습니다. 그리고 y 축을 완전히 제거 할 수 없으므로 그림의 배경색으로 색을 설정합니다. 그런 다음 x 축의 눈금으로 재생할지 여부를 결정할 수 있습니다.

희망이 도움이됩니다.

10

이 작업을 수행하는 한 가지 방법은 축의 속성을 'XLim', 'YLim''DataAspectRatio' 개로 조정하여 본질적으로 한 줄로 렌더링되도록하는 것입니다.

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 

그리고 다음과 같은 그래프를 얻을 것이다 : 여기에 예입니다

enter image description here

-1

아주 간단한 기술이지만 유용한 것입니다.

2 차원에서 플롯하여 matlab 플롯 기능을 사용하십시오. 그런 다음 그림 속성을 편집하여 1D 그림이 필요한 축에 압축합니다! 희망이 도움이 :)

관련 문제