제 3 장 그래프속성의설정과 2 차원그래프
그래프속성의설정 plot: 가장기본적인 MATLAB 그래프작성함수 sin(x) 와 cos(x) 의그래프에서 sin(x) 는선이아닌원모양으로, cos(x) 는점선으로표현 : plot 함수에서원모양을 o' 로, 점선모양을 : 로지정 >> x = :.:2; >> y = sin(x); y2 = cos(x); >> plot(x,y,'o',x,y2,':').5 -.5.2.4.6.8.2.4.6.8 2
설정가능한색, plot 기호, 선모양 곡선속성기호의미곡선속성기호의미 기호 ( 데이터 점을표시 ). 점 b 파란색 x x표 r 빨강색 o 원 g 녹색 + 플러스기호 c 청록색색 (8종류) * 별표 m 자홍색 s 정방형 y 노란색 d 다이아몬드 w 흰색 v 삼각형 ( 위쪽방향 ) k 검은색 ^ 삼각형 ( 아래쪽방향 ) - 실선 < 삼각형 ( 왼쪽방향 ) : 점선선모양삼각형 ( 오른쪽방 > (4종류) -. 반점선향 ) p 오각형 -- 긴점선 h 육각형
선속성을나타내는기호들은조합사용이가능 : plot(x,y, g+:') 는각데이터점들을플러스기호로나타내고그사이를녹색의점선으로연결 곡선의색에한하여원하는색을지칭하는단어를넣는것도가능 예 : 검은색은원래 k이지만 plot(l:, black') 도가능
y, y2 격자, 라벨, 범례의추가 Grid: 는그래프에격자를삽입 그래프라벨 : xlabel 함수와 ylabel 함수를이용 범례 : legend 함수를이용 예 : sin(x) 와챤 (x) 의그래프에서 sin(x) 는선이아닌원모양으로, cos(x) 는점선으로 나타내고타이틀과격자를추가한다음 x, y 축에라벨을표시하고범례를삽입 : >> x = :.:2; >> y = sin(x); y2 = cos(x); >> plot(x,y,'o',x,y2,':') >> grid on >> xlabel('x'), ylabel('y, y2') >> legend('sin(x)','cos(x)').5 y=sin(x), y2=cos(x) sin(x) cos(x) -.5.2.4.6.8.2.4.6.8 2 x
범례는마우스의왼쪽버튼으로선택한상태로드래그하여그래프내의원하는장소로이동이가능 legend 함수의마지막파라미터에숫자를지정 : 범례의위치를설정 예 : 을지정 - 자동으로선과겹치지않는적절한위치에범례를표시 legend 함수의옵션으로 -을지정 : 범례는그래프축의오른쪽바깥에표시 % uselegend.m : 범례옵션의사용예 x = :.:2*pi; y = sin(x); z = exp(-x).*cos(x); plot(x,y, x,z,':'); legend('sin(x)','exp(-x)*cos(x)',-).8.6.4.2 -.2 -.4 -.6 sin(x) exp(-x)*cos(x) -.8-2 3 4 5 6 7
legend 함수의옵션 : legend 함수의옵션 그래프상의범례의위치 가능한한데이터와겹치지않는 최적 위치 축의오른쪽위모서리 ( 기본 ) 2 축의왼쪽위모서리 3 축의왼쪽아래모서리 4 축의오른쪽아래모서리 - 그래프의오른쪽
그래프축 (axis) 속성의설정 axis: 그래프축에대한다양한속성들을설정 예 : 범위에서 y=cos(x) 의그래프 : >> x = :.:2*pi; >> y = cos(x); >> plot(x,y).8.6.4.2 -.2 -.4 -.6 -.8-2 3 4 5 6 7 불필요한여분의삭제 : axis 명령어의 tight 옵션을사용 >> axis tight.8.6.4.2 -.2 -.4 -.6 -.8 2 3 4 5 6
x 축및 y 축의범위 : axis([xmin xmax ymin ymax]) 와같이설정 >> axis([- 7 -.2.2]).8.6.4.2 -.2 -.4 -.6 -.8 - - 2 3 4 5 6 7
axis 명령어옵션 : axis 명령어의옵션 axis([xmin xmax ymin ymax]) axis auto axis equal axis off axis square axis tight grid on grid off xlim([xmin xmax]) ylim([ymin ymax]) 의미 x축및 y축의한계를설정기본축한계로되돌아감 x, y, z 축상의데이터단위를동일화축을제거축박스를정사각형 ( 정육면체 ) 으로축한계를데이터의범위로설정점선의격자선을생성격자선을제거 x축한계를설정 y축한계를설정
문자, 숫자를표시하는간격의자유로운변경 : % xlabelchar.m : x축에숫자대신문자를표시 w = [ ]; xlabel = :.5:2; % w = ['pi.5pi pi.5pi,2pi'] 인문자열을가로축에표시하고자하므로 % for 문을이용한다. for i=:length(xlabel) w = [w num2str(xlabel(i)),'pi ']; end.8 w = w(:end-);.6.4 x = :.:2*pi;.2 y = sin(x); plot(x,y) -.2 set(gca,'xtick',xlabel*pi,'xticklabel',w) -.4 -.6 -.8 - pi.5pi pi.5pi 2pi
amplitude [ Volt] 특수문자의표현 xlabel, ylabel에서의문자설정 : 위첨자문자 ^( 해트 ), 아래첨자문자 _( 언더스코어 ) 나 font 크기의변경, fontsize{} 를이용하여수식등의표시가가능 그래프의타이틀이나라벨에그리스문자나위첨자, 아래첨자를표시 x=(:2)*.; y=sin(x); plot(x,y,'o',x,cos(x),':') title('comparison between sin(\omega_ {\it t}) wave and cos(\omega_ {\it t})') xlabel('time in second [{\bf time}]') ylabel('amplitude [{\bf Volt}]').5 Comparison between sin( t) wave and cos( t) -.5.2.4.6.8.2.4.6.8 2 time in second [ time]
특수문자들의요약 \alpha, \beta, \gamma, \delta, \epsilon, \zeta, \eta, \theta, \vartheta, \iota, \kappa, \lambda, \mu, \nu, \xi, \pi, \rho, \sigma, \varsigma, \tau, \equiv, \Im, \otimes, \cap, \supset, \int, \rfloor, \lfloor, \perp, \wedge, \rceil, \vee, \langle, \upsilon, \phi, \chi, \psi, \omega, \Gamma, \Delta, \Theta, \Lambda,\Xi, \Pi, \Sigma, \Upsilon, \Phi, \Psi, \Omega, \forall, \exists, \ni, \cong, \approx, \Re, \oplus, \cup, \subseteq, \in, \lceil, \cdot, \neg, \times, \surd, \varpi, \rangle, \sim, \leq, \infty, \clubsuit, \diamondsuit, \heartsuit, \spadesuit, \leftrightarrow, \leftarrow, \uparrow, \rightarrow, \downarrow, \circ, \pm, \geq, \propto, \partial, \bullet, \div, \neq, \aleph, \wp, \oslash, \supseteq, \subset, \o, \nabla, \ldots, \prime, \, \mid, \copyright
특수문자에의하여나타내어지는기호 : specialtext.m M- 파일을수행하여획득 - 텍스트파일 specialchar.txt 와스크립트 M- 파일 specialtext.m 을작성하고 Command Window 에서 specialtext 를입력 % specialchar.txt \alpha, \beta, \gamma, \delta, \epsilon, \zeta, \eta, \theta, \vartheta, \iota, \kappa, \lambda, \mu, \nu, \xi, \pi, \rho, \sigma, \varsigma, \tau, \equiv, \Im, \otimes, \cap, \supset, \int, \rfloor, \lfloor, \perp, \wedge, \rceil, \vee, \langle, \upsilon, \phi, \chi, \psi, \omega, \Gamma, \Delta, \Theta, \Lambda,\Xi, \Pi, \Sigma, \Upsilon, \Phi, \Psi, \Omega, \forall, \exists, \ni, \cong, \approx, \Re, \oplus, \cup, \subseteq, \in, \lceil, \cdot, \neg, \times, \surd, \varpi, \rangle, \sim, \leq, \infty, \clubsuit, \diamondsuit, \heartsuit, \spadesuit, \leftrightarrow, \leftarrow, \uparrow, \rightarrow, \downarrow, \circ, \pm, \geq, \propto, \partial, \bullet, \div, \neq, \aleph, \wp, \oslash, \supseteq, \subset, \o, \nabla, \ldots, \prime, \, \mid, \copyright % specialtext.m : 특수문자기호 fid=fopen('specialchar.txt', 'r'); data=fread(fid);
fclose(fid); data=char(data)'; data=data(find(~(data==3))); data=data(find(~(data==))); index=find(data==','); index=[ index]; for i=:length(index)- subplot(,,i);axis off text(.5,.5,['\fontsize{3}',data((index(i)+):(ind ex(i+)-))]) end
그래프의표현 좌우세로축을다르게사용하기 : plotyy 함수 plotyy: 하나의그래프상에서좌우 y 축의눈금을다르게표현 >> x=(:)*.; >> plotyy(x,sin(x),x,*cos(x)).8 9.6 8.4 7.2 6..2.3.4.5.6.7.8.9 5
여러그래프들을하나의그림에나타내기 subplot: 격자패턴의여러그래프들을동일한그림상에모두함께표시 subplot(435), 혹은 subplot(4,3,5): 그림창을영역들의 4 x 3 배열로구분하고해당되는그래프 가 5 번째영역, 즉 2 번째행의 2 번째위치 ( 영역 ) 에위치 >> subplot(22), fplot('exp(sqrt(x)*sin(2*x))',[ 2*pi]) >> subplot(222), fplot('sin(round(x))',[ ],'--') >> subplot(223), fplot('cos(3*x)/x',[. -5 2],'-.') >> subplot(224), fplot('[sin(x),cos(2*x),/(x+)]',[ 5*pi -.5.5]) 5 5 2 4 6.5 -.5-5 2 -.2.4.6.8.5.5 -.5 - -.5 5 5
곡선과눈금모양의설정 LineWidth( 기본은.5 포인트 ) 와 MarkerSize( 기본은 6 포인트 ) 속성 : 점으로지정되는데하나의 점은 /72 인치 >> plot(x,y,'linewidth',2) >> plot(x,y,'p','markersize',) 색상의설정 : MarkerEdgeColor 및 MarkerFaceColor 를이용 예 : 원의둘레를자홍색 >> plot(x,y,'o','markeredgecolor','m') 곡선속성들의기본값 : plot 함수의옵션 기본값 LineWidth.5 MarkerSize 6 MarkerEdgeColor MarkerFaceColor auto none FontSize FontAngle normal
plot 함수를사용한애니메이션 plot 함수를이용한애니메이션의예 : 둥근점의원운동 % exanimation.m : plot 함수를이용한애니메이션의보기 close all for x = :.:; plot(sin(x),cos(x),'ob'); axis([-2 2-2 2]); axis('square'); drawnow; end 2 개의 axis 함수로좌표축크기를지정하고종횡비를일정하게지정 ( square') drawnow: 그래픽버퍼에들어간정보를모두화면에표시 2.5.5 -.5 - -.5-2 -2 -.5 - -.5.5.5 2
그래프의저장과호출 figure 로그려진그림을직접파일 ( 확장자.fig) 로저장가능 그림만저장하고싶은경우 : 그림의메뉴바의 [File] [Save], 또는 save as 로저장 >> plot(sin(:.:2*pi)); >> saveas(gcf,'test'); 그림의호출 : openfig 를사용 >> openfig('test')
여러가지 2 차원그래프 파라미터그래프 반경이 이고중심이 (,) 인원 : 같이파라미터형태로표현이가능 위에서 t 는 부터 까지변화 : >> T = :.:; >> plot(cos(2*pi*t), sin(2*pi*t)) >> axis square.8.6.4.2 -.2 -.4 -.6 -.8 - - -.5.5 ezplot 을이용한파라미터그래프의작성 : >> ezplot('cos(t)', 'sin(t)', [ 2*pi]); axis square
로그척도그래프 loglog: x 와 y 축의척도가모두로그척도인그래프 semilogy: 세로축만로그척도인그래프 예의범위에서의그래프 : % logplot.m : 로그좌표그래프들의보기 clear all x = ::; y = x.^2; subplot(2,2,), loglog(x,y), title('loglog(x,y)'), grid on subplot(2,2,2), semilogx(x,y), title('semilogx(x,y)'), grid on subplot(2,2,3), semilogy(x,y), title('semilogy(x,y)'), grid on subplot(2,2,4), plot(x,y), title('y=x^2') 6 loglog(x,y) 4 x 5 semilogx(x,y) 8 6 2 2 4 semilogy(x,y) 6 4 2 2 4 x 5 y=x 2 4 2 5 5 5
등고선 ( 수준곡선 ) 그래프 2변수함수의등고선그래프 : 함수의수준곡선들, 즉함수의값이일정한 x-y 평면상의점들의집합의그래프 meshgrid 및 contour를이용하여생성 먼저 [X,Y] = meshgrid(x,y) 를이용하여어떤사각형상에격자를구성 contour(x,y,f(x,y)) 는이사각형상에서 f의몇가지등고선들을컬러맵에해당되는색으로표현 contour(x,y,f(x,y),n,'k') 는구간 [min f, max f] 를 n+ 개의부구간 min f max f들로나눈다음 n 개의값 에해당하는 n 개의등고선들을도시 예 : 의등고선그래프 : 3 2 >> [X Y] = meshgrid(-3:.:3, -3:.:3); >> contour(x, Y, X.^2 + Y.^2); axis square ezcontour 를이용하여등고선그래프를작성가능 : >> ezcontour('x^2 + y^2', [-3, 3], [-3, 3]); axis square - -2-3 -3-2 - 2 3
보기 : 구간및에서함수 에대한수준곡선의생성 : ezcontour 및 contour 함수를이용 >> subplot(2) >> ezcontour('sin(3*y-x^2+)+cos(2*y^2-2*x)',[-2 2 - ]); >> x = -2:.:2; y = -:.:; >> [X,Y] = meshgrid(x,y); >> Z = sin(3*y-x.^2+)+cos(2*y.^2-2*x); >> subplot(22) >> contour(x,y,z,2)
MATLAB 내장 2 변수함수 peaks 의수준곡선그래프 : peaks 는 Gauss 분산으로부터얻어진 2 변수함수를표시 >> [x,y,z] = peaks; >> pcolor(x,y,z) >> shading interp >> hold on >> contour(x,y,z,2,'k') >> hold off 3 2 - -2-3 -3-2 - 2 3
clabel 함수 수준곡선들의크기 ( 높이 ) 를그래프안에기입 보기 : 의범위에서함수주어지는곡면에대하여 개의수준곡선들에대한크기의표현 : % clabelusage.m : 수준곡선크기를그래프에기입 clear all x = -2:.:2; y = -2:.:2; [X,Y] = meshgrid(x,y); Z = (X+Y).*exp(-X.^2-Y.^2); ct=contour(x,y,z,); 2 clabel(ct).5 -.55.386.65.5 -.5 -.65 -.496 -.386 -.276.496.276.55 - -.5-2 -2 -.5 - -.5.5.5 2
의범위에서함수 의수준곡선에라벨을표시 : % clabelexam.m : clabel 을이용한수준곡선라벨붙이기 x = -3:.5:3; y = -.5:.25:.5; [X,Y] = meshgrid(x,y); Z = 4*X.^2-2.*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4; cvals = [-2:.5:2 2.3 3:5 6:2:]; [C,h] = contour(x,y,z,cvals); clabel(c,h,cvals([:2:9 4 6])) xlabel('x'), ylabel('y') title('six hump camel back function','fontsize',4)
필드그래프 quiver: 벡터필드나화살표들의배열을나타내는데에사용 화살표들은평면내에간격이동일한점들에위치하거나지정된위치에위치 때로는화살표들의척도를조절하여너무크거나너무작게보이지않도록할필요 보기 : x 축을향하는흡인력과 y 축으로부터의반발력의조합에해당하는 등마루점 이있는 벡터필드의그래프 >> [x, y] = meshgrid(-.:.2:., -.:.2:.); >> quiver(x, -y); axis equal; axis off
2 차원의유체흐름해석을위한 quiver 함수의사용 : 먼저 2 차원데이터를작성하고 gradient 함수로기울기를계산한다음 contour 함수를이용하여수준곡선을나타낸후이그래프를 hold 하고 quiver 함수로각각의벡터를표시 에서함수에대한 quiver 의사용 : % quiverusage.m : quiver 함수의사용예 clear all x = -2:.2:2; y = -2:.2:2; [X,Y] = meshgrid(x,y); Z = (X+Y).*exp(-X.^2-Y.^2); [dx dy]=gradient(z,.5,.5); contour(x,y,z,); hold on quiver(x,y,dx,dy) hold off 2.5.5 -.5 - -.5-2 -2 -.5 - -.5.5.5 2
극좌표그래프 polar 함수이용의보기 : 의범위에서의그래프를작성 >> th = :pi/8:6*pi; >> r = + 2*cos(th); >> polar(th,r) 2 9 3 6 2 5 3 8 2 33 24 27 3
막대그래프 bar 함수 보기 : 시험결과 55점받은학생이 6명, 68점받은학생이 2명, 76점받은학생이 8명, 8점받은학생이 명, 그리고 95점받은학생이 4명이라하고점수를 x축, 학생수를 y축으로하는막대그래프를작성 >> x=[55 68 76 8 95]; >> y=[6 2 8 4] >> bar(x,y) 8 6 4 2 8 6 4 2 55 68 76 8 95
Number of students Class 보기 : 어느학교에서각반별로수능 ~5 등급에해당하는학생수 - 수능등급을가로축 으로, 학생수를세로축으로하고 bar 와 barh 함수를이용 반 2반 3반 등급 5 7 4 2등급 2 5 3등급 9 2 7 4등급 7 6 5 5 등급 2 3 % gradebar.m : bar 및 barh 함수를이용한막대그래프의보기 clear all x = [ 2 3 4 5]; class = [5 2 9 7 2]'; % 열벡터 class2 = [7 2 6 ]'; class3 = [4 5 7 5 3]'; y = [class class2 class3]; % 학생수행렬 subplot(,2,) bar(x,y) xlabel('class'), ylabel('number of students'); legend('class','class2','class3') subplot(,2,2) barh(x,y) xlabel('number of students'), ylabel('class'),; legend('class','class2','class3') 2 8 6 4 2 8 6 4 2 2 3 4 5 Class Class Class2 Class3 5 4 3 2 Class Class2 Class3 5 5 2 Number of students
hist 함수 데이터의분포를구간별로보여주는히스토그램을생성 보기 : 임의의수 개로이루어지는데이터를 2개의동일간격으로분류하여표시 2 >> hist(randn(,),2) 8 6 4 2-3 -2-2 3 hist 에대한첫번째인수 y 는데이터벡터이며두번째인수는저장소들의수를지정하는스 칼라이거나저장소들의중간점들을정의하는벡터 y 만제공되면 개의저장소가사용되며출력인수가지정되지않으면 hist 는막대그래프를 생성 출력인수를지정하는경우첫번째출력인수로빈도수, 두번째출력인수로저장소위치들을 지정 입력 y 가행렬이면각열들에대하여저장소들이만들어지며분류된막대그래프들이생성
hist 함수의사용 % histexam.m : hist 함수의사용 clear all randn('state',) y = exp(randn(,)/3); subplot(2,2,) hist(y) title('-by- data vector, bins') subplot(2,2,2) hist(y,25) title('25 bins') subplot(2,2,3) hist(y,min(y):.:max(y)) title('bin width.') Y = exp(randn(,3)/3); subplot(2,2,4) hist(y) title('-by-3 data matrix') 3 25 2 5 5 -by- data vector, bins.5.5 2 2.5 3 5 Bin width. 5 5 25 bins.5.5 2 2.5 3 4 -by-3 data matrix 5 3 2.5.5 2 2.5 3 2 3 4
Number of students 면적그래프 area 함수 포개올려진면적그래프를생성 수능등급별학생수를 area 함수를이용하여표현 % gradearea.m : 면적그래프의보기 clear all x = [ 2 3 4 5]; class = [5 2 9 7 2]'; % 열벡터 class2 = [7 2 6 ]'; class3 = [4 5 7 5 3]'; y = [class class2 class3]; % 학생수행렬 area(x,y) 6 5 4 3 2 Class Class2 Class3.5 2 2.5 3 3.5 4 4.5 5 벡터인수들을취하는경우 area 함수는 y 값들과 ( 혹은두번째인수로지정된수준 ) 사이의면적이색으로채워지는것을제외하고는 plot 과유사 행렬인수의경우에는열들의그래프가포개올려지며각 x 값에서의합이 display
area 함수사용의보기 : % areausage.m : area 함수의사용 clear all randn('state',) x = [:2, :-:8, :5]; Y = [x' x']; subplot(2,,) area(y+randn(size(y))) subplot(2,,2) Y = Y + 5*randn(size(Y)); area(y,min(min(y))) axis tight 3 2 2 4 6 8 2 4 6 8 2 22 3 2 2 4 6 8 2 4 6 8 2 22
pie 함수 보기 : 수능시험결과등급별학생수의분포는 등급 6 명, 2 등급 38 명, 3 등급 56 명, 4 등급 8 명, 그리고 5 등급 6 명으로나타났다고하고이를 pie 함수를이용하여파이차트로 display: >> x=[ 2 3 4 5] >> y=[6 38 56 8 6] >> pie(x,y) >> legend('grade ', 'grade 2','grade 3','grade 4','grade 5') 7% 3% 33% 2% 27% grade grade 2 grade 3 grade 4 grade 5
계단모양그래프 stairs: 이산데이터표시에편리 보기 : 의범위에서에대한계단모양그래프 : >> x = :.:2*pi; >> y = sin(x); >> stairs(y).8.6.4.2 -.2 -.4 -.6 -.8-2 3 4 5 6 7 stairs 함수로부터계단모양데이터를얻은다음 plot 함수를이용하여계단모양그래프 를얻는것도가능 보기 : >> x = :.:2*pi; >> y = sin(x); >> [xd, yd] = stairs(y); >> plot(xd, yd)
stem 그래프 이산신호의임펄스응답을나타낼때이용 stairs 함수와같은용도로사용 >> x = :.:2*pi; >> y = sin(x); >> stem(y).8.6.4.2 -.2 -.4 -.6 -.8-2 3 4 5 6 7
errorbar 그래프 나타낸데이터의신뢰도등을표시할때편리 데이터와오차데이터를지정 : 오차데이터의 번째는오차의상한, 2 번째는오차의하한 >> x = :.5:2*pi; >> y = sin(x); >> lowlimit =.*ones(size(x)); >> highlimit =.3*ones(size(x)); >> errorbar(x,y,lowlimit,highlimit).5.5 -.5 - -.5-2 3 4 5 6 7
다각형채우기 : fill 함수 plot과유사한방법으로작용 fill(x,y,[r g b]): 꼭지점이 x(i), y(i) 로지정되는다각형을색으로 fill 점들은순서대로취하여지며마지막꼭지점은첫번째꼭지점과연결 칠해지는색깔은세번째인수 [r g b] 에의하여결정 r, g 및 b는 [,] 범위의스칼라로서각각다각형을채우는색에서의빨강, 초록, 그리고파랑의수준을결정 보기 : fill(x,y,[ ]) 은순수한초록으로, fill(x,y,[ ]) 은자홍색으로다각형내부를 fill 빨강, 초록, 파랑을똑같은양으로지정하면검정 ([ ]) 과흰색 ([ ]) 사이에서변할수있는회색으로 fill >> x = [2 4 3]; y = [ 3 5 2]; >> fill(x,y,[ ]) 5 4.5 4 3.5 3 2.5 2.5.5 2 2.5 3 3.5 4
quiver 속도벡터그래프 MATLAB 의 2 차원그래프함수 MATLAB 내장 2 차원그래프함수 : 함수 plot, ezplot loglog semilogx semilogy plotyy polar, ezpolar fplot fill area bar barh hist pie comet errorbar 생성되는그래프간단한 x-y 그래프축들이로그척도인그래프 x 축이로그척도인그래프 y 축이로그척도인그래프왼쪽과오른쪽에 y 축이있는 x-y 그래프극좌표그래프함수그래프작성다각형채우기면적이색으로채워진그래프막대그래프수평막대그래프히스토그램파이차트동영상화시킨혜성모양의 x-y 그래프에러표시막대그래프