복붙노트

[PYTHON] matplotlib에 서브 플로트를 동적으로 추가 / 생성

PYTHON

matplotlib에 서브 플로트를 동적으로 추가 / 생성

x / y 축을 공유하는 여러 개의 서브 도표로 구성된 플롯을 작성하려고합니다. 설명서에서 다음과 같이 보일 것입니다. (내 하위 플롯은 scatterblot입니다.) (코드는 여기에 있습니다)

하지만 하위 플롯을 동적으로 만들고 싶습니다!

따라서 서브 그래프의 수는 이전 함수의 출력에 따라 달라집니다. (내 스크립트의 입력에 따라, 다이어그램 당 약 3 ~ 15 개의 서브 도표가 각기 다른 데이터 세트에서 나올 것입니다.)

아무도 그 방법을 말해 줄 수 있습니까?

해결법

  1. ==============================

    1.

    import matplotlib.pyplot as plt
    from pylab import *
    import numpy as np
    
    x = np.linspace(0, 2*np.pi, 400)
    y = np.sin(x**2)
    
    subplots_adjust(hspace=0.000)
    number_of_subplots=3
    
    for i,v in enumerate(xrange(number_of_subplots)):
        v = v+1
        ax1 = subplot(number_of_subplots,1,v)
        ax1.plot(x,y)
    
    plt.show()
    

    이 코드는 작동하지만 축을 수정해야합니다. 나는 서브 그래프를 사용하여 3 개의 그래프를 모두 같은 열에 표시했습니다. number_of_plots 변수에 정수를 할당하기 만하면됩니다. X 및 Y 값이 각 플롯마다 다른 경우 각 플롯에 대해 값을 지정해야합니다.

    subplot은 다음과 같이 작동합니다. 예를 들어 서브 플로트 값이 3,1,1 인 경우입니다. 이렇게하면 3x1 격자가 만들어지고 첫 번째 위치에 플롯이 배치됩니다. 다음 번 인터 플로우에서 서브 플롯 값이 3,1,2이면 3x1 그리드가 다시 생성되지만 플롯은 2 번째 위치에 배치됩니다.

  2. ==============================

    2.이 게시물을 기반으로하고 싶은 일은 다음과 같습니다.

    이 게시물을 기반으로하고 싶은 일은 다음과 같습니다.

    import matplotlib.pyplot as plt
    
    # Start with one
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot([1,2,3])
    
    # Now later you get a new subplot; change the geometry of the existing
    n = len(fig.axes)
    for i in range(n):
        fig.axes[i].change_geometry(n+1, 1, i+1)
    
    # Add the new
    ax = fig.add_subplot(n+1, 1, n+1)
    ax.plot([4,5,6])
    
    plt.show() 
    

    그러나 폴 H의 대답은 위의 내용을 쉽게 이해할 수있는 gridspec이라는 서브 모듈에 대한 답변입니다. 나는 그것을 독자를위한 운동으로 남겨두고있다. ^ _ ~.

  3. ==============================

    3.사용할 전체 서브 그림과 총 열을 알고 있다고 가정 해 보겠습니다.

    사용할 전체 서브 그림과 총 열을 알고 있다고 가정 해 보겠습니다.

    import matlab.pyplot as plt
    
    # Subplots are organized in a Rows x Cols Grid
    # Tot and Cols are known
    
    Tot = number_of_subplots
    Cols = number_of_columns
    
    # Compute Rows required
    
    Rows = Tot // Cols 
    Rows += Tot % Cols
    
    # Create a Position index
    
    Position = range(1,Tot + 1)
    

    행의 첫 번째 인스턴스는 하위 그림으로 완전히 채워진 행에 대해서만 계정을 작성한 다음 1 또는 2 또는 행 1의 경우 행을 더 추가합니다. Cols - 1 개의 하위 도표에 여전히 위치가 필요합니다.

    그런 다음 그림을 만들고 for 루프를 사용하여 하위 그림을 추가합니다.

    # Create main figure
    
    fig = plt.figure(1)
    for k in range(Tot):
    
      # add every single subplot to the figure with a for loop
    
      ax = fig.add_subplot(Rows,Cols,Position[k])
      ax.plot(x,y)      # Or whatever you want in the subplot
    
    plt.show()
    

    하위 Plot을 올바른 위치로 이동하려면 Position 범위가 필요합니다.

  4. from https://stackoverflow.com/questions/12319796/dynamically-add-create-subplots-in-matplotlib by cc-by-sa and MIT license