 1차원 다이어그램.png)
자료 만들기를 위한 matplotlib 입문(1) 1차원 다이어그램
2022-10-04 last update
5 minutes reading Fortran matplotlib numpy 파이썬이 기사의 타겟
목차
예상되는 데이터 형식
배열을 다룰 수 있는 언어는 많다. fortran도 C에서도 다차원 배열은 보통 사용할 수 있지만, 출력하는 경우는, 예를 들면 다음과 같은 코드로 내는 것이 많다고 생각한다.
do i=1,Nx
write(UNITNUM,*) i,a(i)
end do
이 코드를 실행하면 다음과 같은 형태로 데이터가 늘어서 있습니다.
1 0.000E00
2 0.628E00
...
10 0.810E01
matplotlib 가져오기
Python으로 그래프를 작성할 때는 다음 라이브러리를 사용하십시오.
do i=1,Nx
write(UNITNUM,*) i,a(i)
end do
1 0.000E00
2 0.628E00
...
10 0.810E01
Python으로 그래프를 작성할 때는 다음 라이브러리를 사용하십시오.
각각의 상세에 대해서는 좀더 구그 받도록 하고, 이 3개가 있으면 그래프는 쓸 수 있다.
보통 로컬 PC에 설치하는 경우 GUI를 사용할 수 있지만, 예를 들어 원격 스파콘상의 데이터를 가시화하거나 할 때는 반드시 GUI를 사용할 수있는 것은 아니다. 그 때는 화상에 출력하는 설정(gnuplot의 set term pngcairo와 같은 느낌)을 해야 하지만, 여기에 집착하는 포인트가 있다.
먼저 NumPy와 matplotlib을 설치합니다. 그런 다음 matplotlib.pyplot을 설치하기 전에 matplotlib를 png로 출력하도록 설정합니다. 구체적으로는 다음과 같다.
import numpy as np
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
이 순서를 잘못하면 에러가 나온다.
데이터 로드 및 정렬
데이터의 읽기는 numpy의 loadtxt 함수로 실시한다. 이것은 Numpy 배열을 돌려주는 함수로, 이하와 같이 기술한다.
mydata = np.loadtxt('mydata.txt')
이때 mydata의 내용은
[[1,0.0000],
[2,0.628],
...,
10,0.810]]
그리고 Nx 행 2 열 행렬이됩니다.
한편, matplotlib에서 묘화에 사용하는 plot 메소드는 다음과 같다.
myax.plot(x,y)
이 x는 가로축, y는 세로축의 수치 리스트이며, 모두 같은 차원을 가지는 1차원 리스트여야 한다. 즉 np.loadtxt로 읽은 mydata에서 x, y로 정렬할 필요가 있다. 다만 이번은 「mydata의 1열째」와 「mydata의 2열째」로 하는 것만으로 좋기 때문에, 다음과 같이 지정하는 것만으로 그래프에 할 수 있다.
myax.plot(mydata[:,0],mydata[:,1])
샘플 코드
import numpy as np
import matplotlib as mpl
matplotlib.use('Agg')
import matplotlib.pyplot as plt
mydata = np.loadtxt('mydata.txt')
myfig = plt.figure()
myax = myfig.add_subplot(1,1,1)
myax.plot(mydata[:,0],mydata[:,1])
myfig.savefig('mydata.png')
myfig.clf()
여기서 figure와 axes에 대해 언급해 둔다. figure와 axes는 matplotlib의 객체로, figure가 이미지 전체이고, axes는 각 그래프에 대응한다. 이미지로서는 figure라는 산에 그래프에 대응하는 axes를 붙여 가는 것 같은 느낌이다. plt에 직접 메소드를 작용시켜 가는 방법도 있지만, 이 샘플 코드와 같이 figure 객체와 axes 객체를 정의하는 방법도 있어, 후자가 여러장 병치하는 경우 등으로 확장하기 쉽다.
mydata = np.loadtxt('mydata.txt')
[[1,0.0000],
[2,0.628],
...,
10,0.810]]
myax.plot(x,y)
myax.plot(mydata[:,0],mydata[:,1])
import numpy as np
import matplotlib as mpl
matplotlib.use('Agg')
import matplotlib.pyplot as plt
mydata = np.loadtxt('mydata.txt')
myfig = plt.figure()
myax = myfig.add_subplot(1,1,1)
myax.plot(mydata[:,0],mydata[:,1])
myfig.savefig('mydata.png')
myfig.clf()
여기서 figure와 axes에 대해 언급해 둔다. figure와 axes는 matplotlib의 객체로, figure가 이미지 전체이고, axes는 각 그래프에 대응한다. 이미지로서는 figure라는 산에 그래프에 대응하는 axes를 붙여 가는 것 같은 느낌이다. plt에 직접 메소드를 작용시켜 가는 방법도 있지만, 이 샘플 코드와 같이 figure 객체와 axes 객체를 정의하는 방법도 있어, 후자가 여러장 병치하는 경우 등으로 확장하기 쉽다.