[Data viz] fig.add_subplot(111)의 의미

    fig.add_subplot는 데이터를 시각화할 때 그래프를 그리는 코드 중 하나이다.

     

    fig.add_subplot(111)은

    fig.add_subplot(1,1,1)을

    간략하게 쓴 코드인데 이 두 번째 코드가 무슨 의미인지 알아보자.

     

    일단, 코드를 보자

    fig = plt.figure()
    fig.add_subplot(111)

    1. fig = plt.figure()

    이 코드는 사실 이미지 영역을 확보해줘야 하는 코드로 객체 인스턴스를 생성한다.

    즉, 그래프에는 아무것도 그려지지 않는다.

    괄호 안에는 사실 width와 hetight의 값을 전달해야 하지만 default 값으로 width는 6.4, height는 4.8의 값을 전달해 준다.

     

    2. fig.add_subplot(111)

    위에서 fig.add_subplot(111)은 fig.add_subplot(1,1,1)과 같다고 말했다. 이와 같이 add_subplot함수는 3가지 인자를 가지는데, 이때의 인자를 변수로 바꾸어 쉽게 설명하도록 하겠다. fig.add_subplot(n, m, t)의 뜻은 위에서 생성해 준 인스턴스에 nxm개(이때 n은 행의 개수, m은 열의 개수)의 그래프를 그려주는데 t번째의 위치에 그래프를 그리겠다는 뜻이다. n과 m은 그래프의 모양을, t는 위치를 나타낸다고 생각하면 된다.

    이때 t번째 순서의 기준은 맨 위의 가장 왼쪽부터 오른쪽으로 1,2,3 이렇게 count 하고 밑으로 내려갈수록 4,5,6... 이렇게 count 해준다.

     

    또한 다음의 경우처럼 그래프의 총개수가 달라질 때 해당 값의 위치는 해당 값의 위치에 따라 달라진다.

     

    t1 = fig.add_subplot(211)
    t2 = fig.add_subplot(224)

    2X1개의 그래프가 있다고 가정했을 때 1번째(가장 위에 있는 위치에 그래프 t1)

    2X2개의 그래프가 있다고 가정했을 때 4번째(제일 밑에 있는 가장 오른쪽에 있는 위치의 그래프 t2)

     

     

    그래서 fig.add_subplot(111)은 영역을 확보해 놓은 곳에 1x1의 그래프를 그려줄 건데 그중 첫 번째 위치에 그려줘.라는 뜻이다. 

    위에서 figure()의 인자로 넓이를 확보해 놓은 상태이기에 n이나 m이 늘어날수록 한 그래프가 차지하는 위치는 줄어들게 된다.

     

     

    결론

     fig.add_subplot(111)의 의미?

    위에서 fig.figure()로 확보해 놓은 영역에 1x1의 그래프를 그려줄 건데 그중 첫 번째 위치에 그려줘.

     

     

    헷갈리는 명령어들을 정리해 보면,

     

    plt.subplot()

    - 명시적으로 Axes 객체를 생성한다.

     

    plt.add_subplot()

    - () 안에 주어지는 인자들의 정보로 subplot을 생성한다.

    - add_subplots()와 supplot()은 결국 둘 다 subplot을 생성하는 코드라서 이 둘의 차이점에 대해 열심히

    구글링 해보았는데 명확한 답은 얻지 못했다.

     

    하지만 보통 add_subplot은 

    fig = plt.figure()
    fig.add_subplot(111)

    처럼 영역을 할당하고 할당한 영역에 그려주었는데

     

    subplot은 바로

    t1 = plt.subplot(211)

    와 같이 바로 matplotlib.pyplot에 그려주는 모습을 볼 수 있었다. 

     

    그래서 여러 figure를 사용해서 그래프를 그릴 때는 보통 add_subplot를, 

    하나의 figure만을 사용하거나 코드 상에서 figure를 초기화시키고 다시 사용하지 않아도 되는 경우 subplot을 사용한다고 결론을 지었다. 

     

    plt.subplots()

    - 명시적으로 여러 개의 Axes 객체를 생성한다.(이 또한 subplot을 그리는 여러 방법들 중 하나)

    - Figure 객체와 Axes 객체를 동시에 리턴한다. 

    - 다음과 같이 쓰였을 때

    fig , ax = plt.subplots()

    - 이때 fig는 Figure 객체 즉, 그래프를 그리기 위해 할당받은 전체 영역

    - ax는 전체 영역 안에 그려진 그래프들의 리스트를 말한다. 

    댓글