막대그래프 만들기

조회수 3517회

저는 동일한 tick_label을 갖는 두 개의 막대그래프를 하나의 figure안에 그리고 싶습니다 ㅠㅠ 도와주세요..ㅠㅠㅠ

우선 제가 최종적으로 만들고자 하는 막대그래프의 예는 아래와 같습니다. 이미지

그리고 제가 하나의 막대그래프로 합치고자 하는 두 개의 실제 막대그래프는 아래와 같습니다.

domain_percent = [11.167, 17.973, 44.765, 21.058, 5.037]
X_name = ['Very low', 'Low', 'Moderate', 'High', 'Very high']
n_group = len(X_name)
index = np.arange(n_group)
bar_width = 0.35

pylab.figure(1)
plt.bar(index, domain_percent, bar_width, tick_label=X_name, align='center')

plt.xlabel('Landslide susceptibility zones')
plt.ylabel('Percent of each class')

이미지

domain_percent = [14.686, 11.746, 58.686, 14.534, 0.348]
X_name = ['Very low', 'Low', 'Moderate', 'High', 'Very high']
n_group = len(X_name)
index = np.arange(n_group)
bar_width = 0.35

pylab.figure(2)
plt.bar(index, domain_percent, bar_width, tick_label=X_name, align='center')

plt.xlabel('Landslide susceptibility zones')
plt.ylabel('Percent of each class')

이미지

어떻게 하면 예시 그림처럼 동일한 tick_label을 갖는 두 개의 막대그래프를 하나의 figure안에 그릴 수 있을까요 ㅠㅠㅠ 도와주세요 ㅠㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • plt.bar의 첫번째 argument를 조정해주세요.

    import numpy as np
    from matplotlib import pyplot as plt
    import pylab
    
    domain_percent1 = [11.167, 17.973, 44.765, 21.058, 5.037]
    domain_percent2 = [14.686, 11.746, 58.686, 14.534, 0.348]
    
    X_name = ['Very low', 'Low', 'Moderate', 'High', 'Very high']
    n_group = len(X_name)
    index = np.arange(n_group)
    bar_width = 0.35
    
    pylab.figure(1)
    plt.bar(index, domain_percent1, bar_width, tick_label=X_name, align='center')
    plt.bar(bar_width+index, domain_percent2, bar_width, tick_label=X_name, align='center') #추가된 곳
    
    plt.xlabel('Landslide susceptibility zones')
    plt.ylabel('Percent of each class')
    
    plt.show()
    

    과 같이 사용하시면 될 것 같습니다.

    확장성을 따진다면, 다음과 같이 for 문을 사용해도 괜찮을 것 같습니다.

    import numpy as np
    from matplotlib import pyplot as plt
    import pylab
    
    domain_percent1 = [11.167, 17.973, 44.765, 21.058, 5.037]
    domain_percent2 = [14.686, 11.746, 58.686, 14.534, 0.348]
    domain_percent3 = [11.167, 17.973, 44.765, 21.058, 5.037]
    
    domain_percents = [domain_percent1,domain_percent2, domain_percent3]
    
    
    X_name = ['Very low', 'Low', 'Moderate', 'High', 'Very high']
    n_group = len(X_name)
    index = np.arange(n_group)
    bar_width = 0.15
    
    pylab.figure(1)
    
    for idx, i in enumerate(domain_percents):
        pos = index + bar_width*idx
        plt.bar(pos, i, bar_width, tick_label=X_name, align='center')
    
    plt.xlabel('Landslide susceptibility zones')
    plt.ylabel('Percent of each class')
    
    plt.show()
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)