복붙노트

[PYTHON] matplotlib을 사용하여 두 개의 히스토그램을 동시에 플롯합니다.

PYTHON

matplotlib을 사용하여 두 개의 히스토그램을 동시에 플롯합니다.

파일의 데이터를 사용하여 히스토그램 플롯을 만들었고 문제가 없습니다. 이제는 데이터의 중첩을 원했습니다. 같은 히스토그램에있는 다른 파일, 그래서 나는

n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)

문제는 각 간격마다 가장 높은 값을 가진 막대 만 나타나고 다른 막대는 숨겨져 있다는 것입니다. 서로 다른 색상으로 두 히스토그램을 어떻게 동시에 그릴 수 있을지 궁금합니다.

해결법

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

    1.여기에 실제 예제가 있습니다.

    여기에 실제 예제가 있습니다.

    import random
    import numpy
    from matplotlib import pyplot
    
    x = [random.gauss(3,1) for _ in range(400)]
    y = [random.gauss(4,2) for _ in range(400)]
    
    bins = numpy.linspace(-10, 10, 100)
    
    pyplot.hist(x, bins, alpha=0.5, label='x')
    pyplot.hist(y, bins, alpha=0.5, label='y')
    pyplot.legend(loc='upper right')
    pyplot.show()
    

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

    2.허용 된 답변은 겹치는 막대가있는 막대 그래프 코드를 제공하지만 각 막대가 나란히 배치되도록하려는 경우 다음과 같은 변형을 시도하십시오.

    허용 된 답변은 겹치는 막대가있는 막대 그래프 코드를 제공하지만 각 막대가 나란히 배치되도록하려는 경우 다음과 같은 변형을 시도하십시오.

    import numpy as np
    import matplotlib.pyplot as plt
    plt.style.use('seaborn-deep')
    
    x = np.random.normal(1, 2, 5000)
    y = np.random.normal(-1, 3, 2000)
    bins = np.linspace(-10, 10, 30)
    
    plt.hist([x, y], bins, label=['x', 'y'])
    plt.legend(loc='upper right')
    plt.show()
    

    참조 : http://matplotlib.org/examples/statistics/histogram_demo_multihist.html

    EDIT [2018/03/16] : @stochastic_zeitgeist에서 제안한 것과 같이 다양한 크기의 배열을 플로팅 할 수 있도록 업데이트되었습니다.

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

    3.샘플 크기가 다른 경우 배포본을 단일 y 축과 비교하는 것이 어려울 수 있습니다. 예 :

    샘플 크기가 다른 경우 배포본을 단일 y 축과 비교하는 것이 어려울 수 있습니다. 예 :

    import numpy as np
    import matplotlib.pyplot as plt
    
    #makes the data
    y1 = np.random.normal(-2, 2, 1000)
    y2 = np.random.normal(2, 2, 5000)
    colors = ['b','g']
    
    #plots the histogram
    fig, ax1 = plt.subplots()
    ax1.hist([y1,y2],color=colors)
    ax1.set_xlim(-10,10)
    ax1.set_ylabel("Count")
    plt.tight_layout()
    plt.show()
    

    이 경우 서로 다른 축에 두 데이터 세트를 플로팅 할 수 있습니다. 이렇게하려면 matplotlib을 사용하여 히스토그램 데이터를 가져 와서 축을 지우고 두 개의 별도 축 (다시 겹치지 않도록 bin 가장자리를 이동)에 다시 그립니다.

    #sets up the axis and gets histogram data
    fig, ax1 = plt.subplots()
    ax2 = ax1.twinx()
    ax1.hist([y1, y2], color=colors)
    n, bins, patches = ax1.hist([y1,y2])
    ax1.cla() #clear the axis
    
    #plots the histogram data
    width = (bins[1] - bins[0]) * 0.4
    bins_shifted = bins + width
    ax1.bar(bins[:-1], n[0], width, align='edge', color=colors[0])
    ax2.bar(bins_shifted[:-1], n[1], width, align='edge', color=colors[1])
    
    #finishes the plot
    ax1.set_ylabel("Count", color=colors[0])
    ax2.set_ylabel("Count", color=colors[1])
    ax1.tick_params('y', colors=colors[0])
    ax2.tick_params('y', colors=colors[1])
    plt.tight_layout()
    plt.show()
    

  4. ==============================

    4.다음은 데이터의 크기가 다른 두 막대 그래프가 나란히있는 두 개의 막대 그래프를 같은 플롯에 플롯하는 간단한 방법입니다.

    다음은 데이터의 크기가 다른 두 막대 그래프가 나란히있는 두 개의 막대 그래프를 같은 플롯에 플롯하는 간단한 방법입니다.

    def plotHistogram(p, o):
        """
        p and o are iterables with the values you want to 
        plot the histogram of
        """
        plt.hist([p, o], color=['g','r'], alpha=0.8, bins=50)
        plt.show()
    
  5. ==============================

    5.막대 그래프 만 원하는 것 같습니다.

    막대 그래프 만 원하는 것 같습니다.

    또는 하위 그림을 사용할 수 있습니다.

  6. ==============================

    6.Pandas (pdf로 pandas를 가져옴)를 사용하거나 Pandas를 사용하는 것이 좋습니다.

    Pandas (pdf로 pandas를 가져옴)를 사용하거나 Pandas를 사용하는 것이 좋습니다.

    test = pd.DataFrame([[random.gauss(3,1) for _ in range(400)], 
                         [random.gauss(4,2) for _ in range(400)]])
    plt.hist(test.values.T)
    plt.show()
    
  7. ==============================

    7.hist의 bin 반환 값을 사용해야합니다.

    hist의 bin 반환 값을 사용해야합니다.

    import numpy as np
    import matplotlib.pyplot as plt
    
    foo = np.random.normal(loc=1, size=100) # a normal distribution
    bar = np.random.normal(loc=-1, size=10000) # a normal distribution
    
    _, bins, _ = plt.hist(foo, bins=50, range=[-6, 6], normed=True)
    _ = plt.hist(bar, bins=bins, alpha=0.5, normed=True)
    

  8. from https://stackoverflow.com/questions/6871201/plot-two-histograms-at-the-same-time-with-matplotlib by cc-by-sa and MIT license