matplotlib에서 내림차순 정렬 막대 차트를 만드는 방법

조사해도 의외로 곧 나오지 않았기 때문에 메모.matplotlib.pyplot.bar 에서 numpy.array 형식 데이터의 막대 차트를 만드는 메서드.

환경


  • Python 3.7.3
  • numpy 1.17.2
  • matplotlib 3.1.1

  • 방법


    import numpy as np
    import matplotlib.pyplot as plt
    
    def plot_sorted_bar(figsize: tuple, x: np.array, y: np.array, title: str = None) -> None:
        """
        入力値を降順ソートして棒グラフを作成するメソッド。
    
        Parameters
        ----------
        figsize : tuple
            figsizeのtuple。
        x : np.numpy
            横軸(ラベル)。
        y : np.numpy
            縦軸(数値)。
        title : str
            グラフタイトル文字列。
    
        """
        # yを昇順ソート後、逆順にindexを取得
        sorted_index = np.argsort(y)[::-1]
        # 棒グラフの可視化
        plt.figure(figsize=figsize)
        plt.bar(
            #ラベルが数値だと自動ソートされるため、x軸は文字列型にしておく
            x[sorted_index].astype('str'),
            np.sort(y)[::-1]
        )
        if title is not None:
            plt.title(title)
    

    ※메소드 인수의 引数: 型 이나 -> 型 는 형 힌트라고 불리고 있다. 명시적으로 인수의 형태를 기재하고 있는 것만으로, 명기 이외의 형태에서도 실행 에러는 되지 않는다.
    numpy.array 로 사용되고 있다 [::-1] 는 배열을 역순으로 돌려주는 슬라이스. 예를 들어 [0,1,2,3][::-1]이라면 [3,2,1,0]이 반환됩니다.

    실행 예


    
    # サンプルデータ作成
    x = np.array([1, 2, 3, 4, 5])
    y = np.array([100, 200, 300, 400, 500])
    
    # 可視化
    plot_sorted_bar(
        figsize=(20, 10),
        x=x, 
        y=y,
        title='bar plot'
    )
    



    참고



    『[python] 슬라이스로 리버스! ! (슬라이스의 해설도 있어!)』
    https://qiita.com/okkn/items/54e81346d8f35733ab5e#%E3%81%8A%E5%BE%85%E3%81%A1%E3%81%8B%E3%81%AD%E3%82%B9 %E3%83%A9%E3%82%A4%E3%82%B9%E3%81%A7%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9

    좋은 웹페이지 즐겨찾기