축(axis) 속성 - KAIST IT 아카데미

축(axis) 속성

MATLAB은 그래프가 화면에서 가능한 한 많은 공간을 이용할 수 있도록
직사각형 모양의 좌표계를 만듬
axis auto
axis equal
t = 0:0.1:2*pi;
x = 2 * cos(t);
y = 2 * sin(t);
plot(x, y);
axis 명령어
옵션
의미
axis auto
기본 축 한계로 되돌아감
axis equal
x, y, z 축의 unit이 동등한 크기를
갖도록 설정
axis square
축 박스를 정사각형으로 설정
axis image
axis equal + axis tight
axis square
1
축(axis) 속성

아래와 같이 타원형 그래프를 그려서, axis equal 과 axis square가
어떻게 다른지 확인해 봅시다.
t = 0:0.1:2*pi;
x = 2 * cos(t);
y = 4 * sin(t);
plot(x, y);
2
축(axis) 속성

아래와 같이 타원형 그래프를 그려서, axis equal 과 axis square가
어떻게 다른지 확인해 봅시다.
t = 0:0.1:2*pi;
x = 2 * cos(t);
y = 4 * sin(t);
plot(x, y);
axis equal
axis square
3
축 눈금 표시

축의 속성 ‘xtick’, ‘xticklabel’ 변경
x = 0:0.1:2*pi;
xlabel = linspace(0, 2*pi, 5);
w = '0 pi|0.5 pi|1 pi|1.5 pi|2 pi';
plot( x, sin(x) );
set(gca, 'xtick', xlabel, 'xticklabel', w);
4
Handle Graphics Object

한 그래프는 여러 그래픽 오브젝트들의 조합으로 만들어짐
Figure Object
Line Object
Axes Object
Text Object
• Handle이란?
– MATLAB이 그래픽 오브젝트에 부여하는 고유의 식별 아이디
• Handle은 왜 필요한가?
– 그래프 figure가 여러 개 생성되어 있을 때, 첫 번째 figure의 속성을 바꾸고 싶다면?
–  첫 번째 figure의 handle로 접근이 가능
5
Handle Graphics Object

set 함수
• 매개변수로 지정한 그래픽 오브젝트의 속성을 변경
• set( handle, propertyname, propertyvalue, propertyname, propertyvalue, …)
Figure의
Handle
>> set( 1, ‘color’ , ‘w’)
특성 이름
(propertyname)
특성 값
(propertyvalue)
6
propertynames, propertyvalues
>> set(1)
Alphamap
CloseRequestFcn: string -or- function handle -or- cell array
Color
Colormap
CurrentAxes
CurrentCharacter
CurrentObject
CurrentPoint
DockControls: [ {on} | off ]
FileName
IntegerHandle: [ {on} | off ]
InvertHardcopy: [ {on} | off ]
KeyPressFcn: string -or- function handle -or- cell array
KeyReleaseFcn: string -or- function handle -or- cell array
MenuBar: [ none | {figure} ]
Name
NextPlot: [ new | {add} | replace | replacechildren ]
NumberTitle: [ {on} | off ]
PaperUnits: [ {inches} | centimeters | normalized | points ]
PaperOrientation: [ {portrait} | landscape | rotated ]
PaperPosition
PaperPositionMode: [ auto | {manual} ]
PaperSize
PaperType: [ {usletter} | uslegal | A0 | A1 | A2 | A3 | A4 | A5 | B0 | B1 | B2 | B3 | B4 | B5 | arch-A | arch-B | arch-C | arch-D | arch-E | A | B | C | D | E | tabloid | <custom> ]
Pointer: [ crosshair | fullcrosshair | {arrow} | ibeam | watch | topl | topr | botl | botr | left | top | right | bottom | circle | cross | fleur | custom | hand ]
PointerShapeCData
PointerShapeHotSpot
Position
Renderer: [ {painters} | zbuffer | OpenGL | None ]
RendererMode: [ {auto} | manual ]
Resize: [ {on} | off ]
ResizeFcn: string -or- function handle -or- cell array
SelectionType: [ normal | open | alt | extend ]
ToolBar: [ none | {auto} | figure ]
Units: [ inches | centimeters | normalized | points | {pixels} | characters ]
WindowButtonDownFcn: string -or- function handle -or- cell array
WindowButtonMotionFcn: string -or- function handle -or- cell array
WindowButtonUpFcn: string -or- function handle -or- cell array
WindowKeyPressFcn: string -or- function handle -or- cell array
WindowKeyReleaseFcn: string -or- function handle -or- cell array
WindowScrollWheelFcn: string -or- function handle -or- cell array
7
그래픽 오브젝트 속성 변경해보기
>> close all
>> peaks
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2)
>> set( 1, ‘visible’, ‘off’ )
>> set( 1, ‘visible’, ‘on’ )
>> set( 1, ‘pos’, [230 320 360 350] )
>> set( 1, ‘color’, ‘w’ )
>> set( 1, ‘color’, ‘g’, ‘pos’, [100 320 100 350] )
…
…
8
특정 Handle을 가리키는 변수

gcf (get current figure )

gca (get current axes )
• 현재 활성화 되어있는 figure window의 handle값을 갖고 있는 변수
• 현재 활성화 되어 있는 figure window의 axes object의 handle 값을
갖고 있는 변수

gco (get current object)
• 현재 활성화 되어 있는 figure window에서 마우스로 클릭한 그래프
요소의 handle 값을 갖고 있는 변수
9
특정 Handle을 가리키는 변수
>> t = -2:0.01:2;
>> y1 = t .^ 2;
>> y2 = t .^ 3;
>> plot( t, y1, t, y2 )
파란색 선 마우스로 선택
>> set( gco, ‘linestyle’, ‘:’ )
10
좌우 Y축 범위 다르게 plot

plotyy( X1, Y1, X2, Y2 )
x = 0:0.1:1;
plotyy(x, sin(x), x2, 10*cos(x));
11
여러 그래프를 하나의 그림에 나타내기

subplot(m, n, p) 또는 subplot(mnp)
• 그림을 m x n 영역로 나누고, p번째 영역에 plot
subplot(2, 2, 1);
x = 0:0.1:2*pi;
plot( x, sin(x) );
subplot(2, 2, 2);
x = 0:0.1:10;
plot( x, sin(round(x)) );
subplot(2, 2, 3);
x = 0.01:0.01:2*pi;
plot( x, sinc(x) );
subplot(2, 2, 4);
x = 0:0.1:2*pi;
plot( x, sin(x) );
hold on;
plot( x, cos(2*x) );
1
2
3
4
12
여러 그래프를 하나의 그림에 나타내기
subplot(2, 2, [1 3]);
x = 0:0.1:2*pi;
plot( x, sin(x) );
subplot(2, 2, 2);
x = 0:0.1:10;
plot( x, sin(round(x)) );
subplot(2, 2, 4);
x = 0:0.1:2*pi;
plot( x, cos(2*x) );
13
Quiz

이전 슬라이드의 그래프와 다르게, 첫 번째 그래프가 가로로 넓게 펼쳐진 형태의
figure를 만들어 봅시다.
14
축 방향 거꾸로 만들기

set(gca, ‘xdir’ 또는 ’ydir’ 또는 ’zdir’, ‘rev’)

x 축 또는 y 축이 일반적인 방향의 역방향으로 생성되도록 드로잉
• x축의 값 증가 방향: “왼쪽오른쪽” 에서 “오른쪽왼쪽”
• y축의 값 증가 방향: “아래쪽위쪽” 에서 “위쪽아래쪽”
t = 0:0.1:2*pi;
subplot(1, 2, 1);
plot( t, sinc(t) );
subplot(1, 2, 2)
plot( t, sinc(t) );
set( gca, 'xdir', 'rev' );
15
grid on/off 외의 속성들


xgrid, ygrid, zgrid : 각각의 좌표축에만 grid 설정
gridlinestyle : grid 라인의 스타일 변경
t = 0:0.001:1;
y = exp(-20*t) .* sin(200*t);
plot(t, y);
set(gca, 'xgrid', 'on', 'gridlinestyle', '-.');
16
곡선과 눈금 모양 설정

plot 함수에서 선의 굵기, marker의 크기 및 색상, 폰트의 크기 등을
설정 가능
>> plot(x,sin(x), '^r--',
'LineWidth', 2,
'MarkerEdgeColor', 'g',
'MarkerFaceColor', 'b')
plot 함수 옵션
기본값
LineWidtn
0.5
MarkerSize
6
MarkerEdgeColor
auto
MarkerFaceColor
none
FontSize
10
FontAngle
normal
17
ez* 그래프 드로잉 함수들
18
ez* 함수

19
ezplot
(2D plotter)

>> ezplot( ‘exp( x^2 ) / x’ )
>> ezplot( 'sin(x) + sin(y) = sin(x*y)' )
20
ezplot
(2D plotter)

>> ezplot('sinc(x)', [-1, 10])
>> ezplot('x^2+y^2 = 3^2', [-pi 0.7*pi])
21
ezplot
(2D plotter)

>> ezplot('cos(t)', 'cos(t)*sin(t)')
>> ezplot('cos(t)', 'cos(t)*sin(t)', [0, 3])
22
ezplot3
(3D plotter)

>> ezplot3( 'cos(t)','t*sin(t)','sqrt(t)‘ )
23
ezplot3
(3D plotter)

>> ezplot3( 'cos(t)','t*sin(t)','sqrt(t)‘, [0, 10] )
24
ezplot3
(3D plotter)

>> ezplot3( 'cos(t)','t*sin(t)','sqrt(t)‘, [0, 10], ‘animate’ )
25
ezcontour

>> ezcontour('sin(3*y-x^2+1) + cos(2*y^2-2*x)', [-2 2 -1 1])
26
Quiz

27
ezcontourf

>> ezcontour('sin(3*y-x^2+1) + cos(2*y^2-2*x)', [-2 2 -1 1])
28
ezcontourf

>> ezcontour('sin(3*y-x^2+1) + cos(2*y^2-2*x)', [-2 2 -1 1])
29
ezsurf

>> ezsurf('sin(3*y-x^2+1) + cos(2*y^2-2*x)', [-2 2 -1 1])
30
ezsurf

>> ezsurf('sin(3*y-x^2+1) + cos(2*y^2-2*x)', [-2 2 -1 1])
31
ezsurf

>> ezsurf( 'x', 'x+y', 'sin(x)+cos(2*y)‘ )
32
ezsurfc

>> ezsurfc('x.*exp(-x.^2 - y.^2)')
33
Quiz

34
Quiz Sol.

>> ezsurf('cos(x)*cos(y)', 'sin(x)', 'cos(x)*sin(y)', [0, 2*pi])
35
ezmesh, ezmeshc

36
ezpolar
(polar coordinate plotter)

>> ezpolar( 'sin(2*t)*cos(3*t)', [0 pi] )
37
2D 그래프 드로잉 함수들
38
bar 그래프
>> x = [55 68 76 80 95];
>> y = [6 12 18 11 4];
>> bar(x, y);
>> barh(x, y);
subplot(3,1,1);
bar( rand(10,5), 'stacked‘ );
subplot(3,1,2);
bar( 0:.25:1, rand(5), 1);
subplot(3,1,3);
bar( rand(2,3), .75, 'grouped‘ );
39
bar 그래프

수능 등급 별 학생수
수능등급
1반
2반
3반
1등급
5
7
4
2등급
12
11
15
3등급
19
20
17
4등급
7
6
5
5등급
2
1
3
S = [5 7 4; 12 11 15; 19 20 17; 7 6 5; 2 1 3];
bar(S);
legend( ‘1반’, ‘2반’, ‘3반’ );
xlabel( ‘등급’ );
ylabel( ‘학생수’ );
40
bar3 그래프

수능 등급 별 학생수
수능등급
1반
2반
3반
1등급
5
7
4
2등급
12
11
15
3등급
19
20
17
4등급
7
6
5
5등급
2
1
3
S = [5 7 4; 12 11 15; 19 20 17; 7 6 5; 2 1 3];
bar3(S)
legend('1반', '2반', '3반');
xlabel('반');
ylabel('학생수');
ylabel('등급');
zlabel('학생수');
41
hist 그래프

r = hist( Y )
• 입력 데이터 Y의 범위를 균일하게 10등분
하여 해당 범위 내에 속하는 원소들을 count
>> hist( randn(1000,1) )

r = hist( Y, k )
• 입력 데이터 Y의 범위를 균일하게 k등분 하여
해당 범위 내에 속하는 원소들을 count
>> hist( randn(1000, 50) )
42
area 그래프
S = [5 7 4; 12 11 15; 19 20 17; 7 6 5; 2 1 3];
area(S);
legend( ‘1반’, ‘2반’, ‘3반’ );
xlabel( ‘반’ );
ylabel( ‘학생수’ );
43
pie 그래프
x = [1 2 3 4 5];
y = [16 38 56 18 6];
pie(x, y);
legend('grade 1', 'grade 2', 'grade 3', 'grade 4', 'grade 5', -1);
44
pie3 그래프

h = pie3( X )

h = pie3( X, explode )
• 배열 X를 구성하는 각각의 원소들을 하나의 조각으로 표현
• explode의 nonzero에 있는 조각을 pie chart 중심에서 이탈시켜 표현
>> x = [1 3 0.5 2.5 2];
>> explode = [0 1 0 0 1];
>> pie3( x, explode );
45
계단 모양 그래프

이산 데이터 표시 등에 사용될 수 있는 그래프
>> x = 0:0.1:2*pi;
>> y = sin(x);
>> stairs( y );
46
stem 그래프

이산 신호 임펄스 응답 나타낼 때 이용
>> x = 0:0.1:2*pi;
>> y = sin(x);
>> stem( y );
47
errorbar 그래프

데이터의 신뢰도 표시에 사용되는 그래프
• 오차 데이터 지정해야 함
>> x = 0:0.5:2*pi;
>> y = sin(x);
>> lowlimit = 0.1*ones(size(x));
>> highlimit = 0.3*ones(size(x));
>> errorbar(x, y, lowlimit, highlimit);
48
Quiz

49
Quiz Sol.

x = -2:0.01:2;
n = 100;
f = zeros(1, length(x));
for k=1:2:n
f = f + sin(pi*k*x)/k;
end
plot(x,f);
50
Plot Editing
51
Plot Editing

그래프 회전, 텍스트 레이블, 화살표, 도형, …
52