파이썬 그래프 반전 질문[내공150]

파이썬 그래프 반전 질문[내공150]

작성일 2022.10.09댓글 1건
    게시물 수정 , 삭제는 로그인 필요





파이썬 그래프 그리면 위와같이 표현되는데요, 
실제로 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 부분에서 계속 반전이 생기는거같습니다..ㅠㅠ

해결방법이 없을까요??


#파이썬 그래프 그리기 #파이썬 그래프 구현 #파이썬 그래프 겹쳐그리기 #파이썬 그래프 시각화 #파이썬 그래프 여러개 그리기 #파이썬 그래프 색깔 #파이썬 그래프 종류 #파이썬 그래프 라이브러리 #파이썬 그래프 저장 #파이썬 그래프 크기

profile_image 익명 작성일 -

사실 데이터의 성격이나 차트가 의미하는 바를 알 수 없기때문에 코드를 해석하지 못해요. ㅎㅎ

# plt.xlim(0, 200)

# plt.ylim(0, 200)

부분을 주석처리하면 아래와 같이 x축, y축 이 바뀐건지 알 수 있을 것 같아요.

아래 그림인데 어떤가요?

태양에 대해 좀 알려주세요^~^

... 노력들 질문3.탸양열을 이용하는 방법 자세하고 세밀하게 알려주세여^~^ 내공20걸어요 1. 태양의 질량 : 태양은... 코로나그래프를 이용하지 않으면 망원경으로도 관측하기...

워드 2급 필기 요점정리좀...

... 내공 팍팍드립니다... 1과목․워드프로세싱 용어 및 기능 1장․워드프로세서의 구성 핵심 001 종류 2벌식 3벌식 구성 ․자음 19자 한 벌 ․모음 14자 한 벌 ․자음(초성)...

컴퓨터 관련(IT) 용어 20개 알려주세요

... (한 2~3줄?) 내공은 30드림니다... 되도록 빨리 올려주세요 추가질문,, 그리고 컴퓨터 용어랑 IT 용어랑... 발표한 150MHz 알파 21064로 처음 세상에 소개된...

내공150) 파이썬 오류 질문이요!

... 제가 원하는 출력은 사인 그래프 ============== * * * * * * * * * * * * * * * * ... 이런걸 원했습니다 ㅠ 문자열을 소수 번 곱할 수는 없지요;;...