>>> from dislin import * >>> from Numeric import *가장 간단한 Quickplot 루틴은 plot()이다. plot()은 라인으로 연결된 데이터 점들을 담은 2D 그래프를 그려낸다. 실제로 작동하는 것을 보려면 파이썬 명령어 창을 열고 다음을 타이핑해 넣으면 된다.
>>> x = arange(100.0) >>> plot(x,sin(x/3)+cos(x/5)) >>> disfin()첫 번째 명령어는 NumPy의 함수로서 x=1.0,…,100.0인 배열 하나를 만든다. 여기서 정말로 명심해 두어야 할 점은 100.0에서 .0이라고 표기함으로 인해 그 숫자들을 부동소수점 수로 만들어 준다는 것이다. 그렇게 하지 않을 경우 정수들을 담은 배열 하나를 만들 것이다. 다른 방식을 사용할 경우 다음과 같이 사용할 수 있다.
>>>x = arange(100,Float)이렇게 하면 x는 부동소수점 수가 될 것이다. plot() 명령어는 인수로 두 개를 각각 배열로 취한다. 그리고 독립 변수 혹은 세로 축인 두 번째 인수를 종속 변수 혹은 가로 축인 첫 번째 인수에 대하여 도표화한다. 더욱 형식을 갖추어 말하면 plot() 도표 명령어는 함수 f(x)를 x에 대하여 도표화한다. 이 예제를 보여주기 위해 필자는 아래의 함수를 선택하였다.
두 개의 사인 함수의 합
이와 같이 간단한 2D 도표외에도, 3D 그래픽도 가능한 Quickplot 루틴이 몇몇 개 있다. 이러한 루틴들 각각은 똑같이 기본적인 인수들을 사용한다. 첫 번째 인수는 값들이 담긴 행렬 하나이고 다음에 일차원 배열 두 개가 따른다. 삼차원 도표에는 축이 세 개 있다. x와 y축이 형성한 평면(flat surface)에 z축이 세워진다. z축 행렬에 있는 값들은 x-y 평면의 (위 또는 아래로 세워지는) 높이이다. x와 y의 일차원 배열은 각 축을 따라 눈금을 제공한다. 또 다시 형식적인 표기법으로 되돌아 가보면 3D 루틴은 x와 y에 대하여 z=f(x,y)를 도표화한다. 3D 도표들을 위해 필자는 아래광 같은 함수를 선택했다.
이차원 사인곡선 함수
>>>z_mat = zeros((180,180),Float) >>>x_ray = arange(180.0) >>>y_ray = arange(180.0) >>>dtr = 3.141592654/180.0 >>>for x in x_ray: for y in y_ray: z_mat[int(x)][int(y)] = sin(x*3*dtr)*sin(y*2*dtr) >>>surface(z_mat,x_ray,y_ray) >>>disfin()첫 번째 명령어는 미리 적절히 크기가 조정된 결과 행렬을 만들어 낸다. zeros() 함수를 사용하면 배열의 크기를 조절 할 수 있고 그 배열을 위해 저장 공간을 미리 할당할 수 있다. zeros() 함수에서 두 번째 인수는 행렬에 있는 0들이 정수형 0이 아니라 부동 소수점형 0이 되도록 선언한다(기본 값으로는 정수형으로 생성될 것임). 만약 두 번째 인수를 생략하면 바로 다음에 일어나는 계산 결과는 소수점 이하가 잘려 나가고 z_mat 행렬에 정수 값들로 저장될 것이다(이것은 우리가 원하던 바가 아님!)
이것만으로도 벌써 흥분할 수도 있겠지만 단색이라 너무 단조롭다는 생각이 들지 않는가? surface() 함수를 surshade() 함수로 전환하면 다음과 같은 도표가 생성된다.
어떤가? 조금 더 나아지지 않았는가! 색을 사용하니 도표의 특징이 정말 더 잘 드러난다. QuickPlots에서 보여주는 마지막 예제로서, surshade() 함수를 surf3() 함수로 전환하면, 아래 그림과 같이 같은 데이터에 대하여 색깔 있는 등고선 도표가 만들어질 것이다. 오른쪽에 보이는 색깔 막대는 도표에서 표현되는 색상들의 범위를 보여준다.
Quickplot 수정
>>> x=arange(100.0) >>> setvar("X","Independent Variable") >>> setvar("Y","Dependent Variable") >>> plot(x,sin(x/3)+cos(x/5)) >>> disfin()
기본을 넘어서서
>>> from pxdislin import *이것은 DISLIN 라이브러리 그 자체를 처리해 준다. (원하지 않는 사람도 있을 수 있지만) NumPy를 원한다면 그것도 꼭 임포트 하도록 해라.
>>> plot = dPlot() >>> axis = dAxis(-10,10,-10,10) >>> plot.add_axis(axis) >>> plot.show()첫 번째 라인은 기본적인 도표 객체를 만든다. 두 번째 라인은 축 객체 하나를 만들었다. 세 번째 라인은 앞의 두 객체를 연결했으며 네 번째 라인은 도표를 그리도록 만들었다. 잘만 따라 한다면 사각형 창이 화면에 빈 축을 가지고 나타날 것이다.
>>>plot(ttext="Title") >>>plot.show()새로운 도표창이 나타날 것이다. 이 전과 비슷하게 보이지만 제목에 문자열이 있다. 특정 객체에 대하여 선택사항의 목록을 보려면 그냥 그 객체의 이름을 타이핑해 넣고 다음에 빈 괄호 한 쌍을 타이핑 하면 된다.
>>> plot() *dPlot: app_look = console color = fore continue_key = Return display_type = screen external_ID = None external_type = window filename = dis.out font = default font_size = 36 height = 500 origin = (25, 25) page_height = 3000 page_width = 3000 ps_origin = (25, 25) pscript = None pscript = None psfont = courier psfont = courier scale = 1.0 screen_mode = normal size = None suppress_disout = 1 tsize = 64 ttext = test width = 500 *END OBJECT: dPlot여기서 주목할 것은 각각의 선택사항에 대하여 현재 설정이 무엇인지 알려주는 이 명령어의 또다른 멋진 특징이다.
>>> x=arange(100.0) >>> y = sin(x/3)+cos(x/5) >>> plot = dScatter(x,y) >>> plot.add_axis(dAxis(0,100,-4,4)) >>> plot.show().위의 코드를 실행하고 나면 다음과 같은 결과를 얻을 것이다.
도표의 데이터를 열람하려면 다음과 같이 plot.xl라고 타이핑해 넣어야 한다(xl은 종속 변수를 담고 있는 정보 속성(info attribute)임). 정보 변수들을 담은 리스트를 보려면 다음과 같이 object._info라고 타이핑해 넣으면 된다. 아래 예제는 방금 생성된 산포 도표(scatter plot)의 정보 매개변수(info parameters)들을 보여준다.
>>> plot._info ["axis", "legend", "title", "xl", "yl"]pxDislin을 사용하면 3D 도표도 만들 수 있다. 다음은 앞의 예제를 다시 만든 것이다. 여기서 주목할 것은 d3Dsurface 객체가 일정 범위에 대해서 평가될 함수 하나를 첫 번째 인수로 취한다는 것이다. 두 번째 인수는 x 변수의 시작, 중지, 범위를 지정하고 세 번째 인수는 y 변수의 시작, 중지, 범위를 지정한다.
>>> def f(x,y): ... dtr = 3.1415 / 180.0 ... return(sin(x*3*dtr)*sin(y*2*dtr)) ... >>> plot = d3DSurface(f,(0,180.0,1),(0,180.0,1)) >>> plot.surface(clr_top=20) >>> plot.surface(clr_bottom=230) >>> plot.show()
게임 끝
이전 글 : 에릭 하게만 시리즈 수치처리 파이썬 소개
다음 글 : 왜 mod_perl인가?
최신 콘텐츠