파이썬 그래프 반전 질문[내공150]
-
게시물 수정 , 삭제는 로그인 필요
파이썬 그래프 그리면 위와같이 표현되는데요,
실제로 K=10 그림이 k=1 그림인데 거꾸로 나옵니다.
----------코드---------------------
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap, BoundaryNorm
import matplotlib as mpl
# 3차원 배열 선언시, 인덱스를 1부터 시작하기 위해 사용하는 변수.
start_idx = 1
# 200X200의 10개의 격자데이터 자료 설정
IB = 200 + start_idx
JB = 200 + start_idx
nt = 10 + start_idx
# 3차월 배열 할당 및 0.0으로 초기화. 인덱스 0은 사용하지 않음.
pres = np.zeros((IB, JB, nt))
# k->nt, j->JB, i->IB 루프를 실행하면서
# pres 배열에 들어가는 값을 계산하여 넣어준다.
# Generate time-series data of 2-d grid-point values
for k in range(start_idx, nt):
for j in range(start_idx, JB):
for i in range(start_idx, IB):
i0 = 120 - 0.8*(k**2)
j0 = 100 + 7.2*k
pres[i, j, k] = 1000.0 - 60.0 * np.exp(-((i - i0) / 10.0) ** 2 \
- ((j - j0) / 10.0) ** 2) \
+ 0.2 * (i + j)
# while 문을 nt 만큼 수행하기 위해 사용하는 변수
k = 0
# 파이썬은 배열의 인덱스가 0부터 시작하기 때문에
# min-1 ~ min+1 사이의 값을 인덱스로 접근할 때 활용하는 변수이다.
offset = 1
# 그래프를 그리기 위한 리스트
xc_list = []
yc_list = []
pcen_list = []
# 다음 while 문은 k->nt로 1식 증가하면서
# pres min 값과 (xc,yc) 값을 계산하여 화면과 파일에 출력한다.
while True:
k = k + 1
# k 값이 nt 값이 되면 while 문을 break로 중단시키면 프로그램은 종료된다.
if k >= nt:
print('----------------Centers of vortices all sought.----------------')
break
# Search the minimum grid-point from kth field
# 최저값 포인트의 array index 찾기
amin = pres[1, 1, k]
for j in range(start_idx, JB):
for i in range(start_idx, IB):
if pres[i, j, k] < amin:
amin = pres[i, j, k]
i_min = i
j_min = j
# 인덱스 슬라이싱 [i_min-1:i_min+2]으로 원소가 3개인 배열을 y에 할당
# 즉, i_min-1, i_min, i_min+1 인덱스가 가리키는 원소 3개이다.
# i_min+2는 stop index 번호로, stop-1 즉 위에서는 i_min+1 원소까지만 추출됨을 유의(파이썬의 특징)
# Find the minimuM value of a parabolic function
# that approximates 3 gridpoint values in x-dir
y = pres[i_min-1:i_min+2, j_min, k]
a3 = y[0 + offset]
a2 = (y[1 + offset] - y[-1 + offset]) / 2.0
a1 = (y[1 + offset] + y[-1 + offset] - 2 * a3) / 2.0
dx = -a2 / (2 * a1)
# Find the minimuM value of a parabolic function
# that approximates 3 gridpoint values in y-dir
y = pres[i_min, j_min-1:j_min+2, k]
a3 = y[0 + offset]
a2 = (y[1 + offset] - y[-1 + offset]) / 2.0
a1 = (y[1 + offset] + y[-1 + offset] - 2 * a3) / 2.0
dy = -a2 / (2 * a1)
# Get the local maximum or minimu by
# linear interpolation
ip = +1
if dx < 0:
ip = -1
jp = +1
if dy < 0:
jp = -1
p_j0 = pres[i_min + ip, j_min, k] * abs(dx) \
+ pres[i_min, j_min, k] * (1 - abs(dx))
p_jp = pres[i_min + ip, j_min + jp, k] * abs(dx) \
+ pres[i_min, j_min + jp, k] * (1 - abs(dx))
p_cen = p_jp * abs(dy) + p_j0 * (1-abs(dy))
xc_list.append(i_min + dx)
yc_list.append(j_min + dy)
pcen_list.append(p_cen)
# 화면에 결과값들을 춢력 한다.
print('---------------------------------------------------------------')
print('k = %d' % k)
print('i_min = %12.4E j_min = %12.4e ' % (i_min, j_min))
print('dx = %12.4E dy = %12.4e ' % (dx, dy))
print('pres min = %12.4E (xc,yc) = %12.4e, %12.4e ' % (p_cen, i_min + dx, j_min + dy))
# 그래프 그림 크기 지정
plt.figure(figsize=(20, 20))
c_levels = [950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060]
norm = mpl.colors.BoundaryNorm(c_levels, ncolors=256)
plt.subplots_adjust(wspace=0.2,hspace=1)
for k in range(start_idx, nt):
plt.subplot(2,5,k)
plt.contour(pres[1:201,1:201,k],colors='black',levels = range(950,1070,10),linewidths = 0.5)
plt.imshow(pres[1:201,1:201,k],cmap='RdBu_r',norm=norm)
plt.colorbar(ticks=c_levels,shrink=0.4)
plt.title('k = %d' % k,size=25,weight='bold',pad='20' )
plt.xlim(0, 200)
plt.ylim(0, 200)
plt.show()
--------------------------------------------------------
--------------결과--------------------------------------
---------------------------------------------------------------k = 1i_min = 1.1900E+02 j_min = 1.0700e+02 dx = 3.1392E-02 dy = 3.1392e-02 pres min = 9.8528E+02 (xc,yc) = 1.1903e+02, 1.0703e+02 ---------------------------------------------------------------k = 2i_min = 1.1700E+02 j_min = 1.1400e+02 dx = -3.6713E-01 dy = 2.3091e-01 pres min = 9.8645E+02 (xc,yc) = 1.1663e+02, 1.1423e+02 ---------------------------------------------------------------k = 3i_min = 1.1300E+02 j_min = 1.2100e+02 dx = -3.6747E-01 dy = 4.3194e-01 pres min = 9.8713E+02 (xc,yc) = 1.1263e+02, 1.2143e+02 ---------------------------------------------------------------k = 4i_min = 1.0700E+02 j_min = 1.2900e+02 dx = 3.1392E-02 dy = -3.6693e-01 pres min = 9.8732E+02 (xc,yc) = 1.0703e+02, 1.2863e+02 ---------------------------------------------------------------k = 5i_min = 1.0000E+02 j_min = 1.3600e+02 dx = -1.6750E-01 dy = -1.6750e-01 pres min = 9.8733E+02 (xc,yc) = 9.9832e+01, 1.3583e+02 ---------------------------------------------------------------k = 6i_min = 9.1000E+01 j_min = 1.4300e+02 dx = 3.1392E-02 dy = 3.1392e-02 pres min = 9.8688E+02 (xc,yc) = 9.1031e+01, 1.4303e+02 ---------------------------------------------------------------k = 7i_min = 8.1000E+01 j_min = 1.5000e+02 dx = -3.6713E-01 dy = 2.3091e-01 pres min = 9.8645E+02 (xc,yc) = 8.0633e+01, 1.5023e+02 ---------------------------------------------------------------k = 8i_min = 6.9000E+01 j_min = 1.5700e+02 dx = -3.6747E-01 dy = 4.3194e-01 pres min = 9.8553E+02 (xc,yc) = 6.8633e+01, 1.5743e+02 ---------------------------------------------------------------k = 9i_min = 5.5000E+01 j_min = 1.6500e+02 dx = 3.1392E-02 dy = -3.6693e-01 pres min = 9.8412E+02 (xc,yc) = 5.5031e+01, 1.6463e+02 ---------------------------------------------------------------k = 10i_min = 4.0000E+01 j_min = 1.7200e+02 dx = -1.6750E-01 dy = -1.6750e-01 pres min = 9.8253E+02 (xc,yc) = 3.9832e+01, 1.7183e+02 ----------------Centers of vortices all sought.----------------
---------------------------------------------------------------
입니다. 위의 결과에서 xc와 yc의 지점을 보면 그래프에서 x축이 y축이 되고 y축 값이 x축으로 표현되는것보면 numpy나 imshow 부분에서 계속 반전이 생기는거같습니다..ㅠㅠ
해결방법이 없을까요??
---------------------------------------------------------------k = 1i_min = 1.1900E+02 j_min = 1.0700e+02 dx = 3.1392E-02 dy = 3.1392e-02 pres min = 9.8528E+02 (xc,yc) = 1.1903e+02, 1.0703e+02 ---------------------------------------------------------------k = 2i_min = 1.1700E+02 j_min = 1.1400e+02 dx = -3.6713E-01 dy = 2.3091e-01 pres min = 9.8645E+02 (xc,yc) = 1.1663e+02, 1.1423e+02 ---------------------------------------------------------------k = 3i_min = 1.1300E+02 j_min = 1.2100e+02 dx = -3.6747E-01 dy = 4.3194e-01 pres min = 9.8713E+02 (xc,yc) = 1.1263e+02, 1.2143e+02 ---------------------------------------------------------------k = 4i_min = 1.0700E+02 j_min = 1.2900e+02 dx = 3.1392E-02 dy = -3.6693e-01 pres min = 9.8732E+02 (xc,yc) = 1.0703e+02, 1.2863e+02 ---------------------------------------------------------------k = 5i_min = 1.0000E+02 j_min = 1.3600e+02 dx = -1.6750E-01 dy = -1.6750e-01 pres min = 9.8733E+02 (xc,yc) = 9.9832e+01, 1.3583e+02 ---------------------------------------------------------------k = 6i_min = 9.1000E+01 j_min = 1.4300e+02 dx = 3.1392E-02 dy = 3.1392e-02 pres min = 9.8688E+02 (xc,yc) = 9.1031e+01, 1.4303e+02 ---------------------------------------------------------------k = 7i_min = 8.1000E+01 j_min = 1.5000e+02 dx = -3.6713E-01 dy = 2.3091e-01 pres min = 9.8645E+02 (xc,yc) = 8.0633e+01, 1.5023e+02 ---------------------------------------------------------------k = 8i_min = 6.9000E+01 j_min = 1.5700e+02 dx = -3.6747E-01 dy = 4.3194e-01 pres min = 9.8553E+02 (xc,yc) = 6.8633e+01, 1.5743e+02 ---------------------------------------------------------------k = 9i_min = 5.5000E+01 j_min = 1.6500e+02 dx = 3.1392E-02 dy = -3.6693e-01 pres min = 9.8412E+02 (xc,yc) = 5.5031e+01, 1.6463e+02 ---------------------------------------------------------------k = 10i_min = 4.0000E+01 j_min = 1.7200e+02 dx = -1.6750E-01 dy = -1.6750e-01 pres min = 9.8253E+02 (xc,yc) = 3.9832e+01, 1.7183e+02 ----------------Centers of vortices all sought.----------------
---------------------------------------------------------------
입니다. 위의 결과에서 xc와 yc의 지점을 보면 그래프에서 x축이 y축이 되고 y축 값이 x축으로 표현되는것보면 numpy나 imshow 부분에서 계속 반전이 생기는거같습니다..ㅠㅠ
해결방법이 없을까요??
#파이썬 그래프 그리기 #파이썬 그래프 구현 #파이썬 그래프 겹쳐그리기 #파이썬 그래프 시각화 #파이썬 그래프 여러개 그리기 #파이썬 그래프 색깔 #파이썬 그래프 종류 #파이썬 그래프 라이브러리 #파이썬 그래프 저장 #파이썬 그래프 크기