plotlyで積み上げ棒グラフを作成するための設定

plotlyの積み上げ棒グラフ

plotlyで積み上げ棒グラフを作成するPythonスクリプトを紹介します。積み上げ棒グラフに関係する設定項目を一覧できるように全て詰め込みました。不要な設定は変更または削除してご利用ください。

なお、下記のスクリプトはplotly.expressを使わないやり方です。

目次

スクリプト全文

import datetime

import plotly.graph_objects as go
import plotly.io as pio


def generate_stacked_bar_plot_sample():
  """
  plotlyで積み上げ棒グラフを生成するサンプル。
  備忘録として、主要な設定項目を全て活用する。
  """

  # 可視化するデータのサンプル

  # 品目
  items = [
    "りんご", "バナナ", "キウイ"
  ]

  # 売上
  sales  = [
    [213, 293, 242, 234],  # りんご
    [291, 272, 311, 298],  # バナナ
    [178, 142, 113, 89],  # キウイ
  ]

  # 棒の色
  colors = [
    "rgba(238, 51, 0, 255)", #"#EE3300FF",
    "rgba(238, 204, 0, 255)", #"#EECC00FF",
    "rgba(0, 221, 51, 255)", #"#00DD33FF"
  ]

  # 年月日
  dates = [
    datetime.datetime(year=2021, month=10, day=1),
    datetime.datetime(year=2021, month=11, day=1),
    datetime.datetime(year=2021, month=12, day=1),
    datetime.datetime(year=2022, month=1, day=1)
  ]

  # plotly.graph_objects.Figureの生成
  fig = go.Figure()
  for i in range(3):
    # 棒を追加
    fig.add_trace(
      go.Bar(
        name=items[i],  # データの名称(凡例に表示)
        x=dates,  # 横軸の値のリスト
        y=sales[i],  # 縦軸の値のリスト
        text=sales[i],  # 棒に記載するテキスト
        marker_color=colors[i],  # 棒の色
    ))

  # 横軸の設定
  xaxis = {
    "title": "年月",  # 軸ラベル
    "titlefont": {  # 軸ラベルのフォント
      "size": 14,  # サイズ
      "color": "rgba(80, 80, 80, 255)",  # 色
    },
    "tickangle": 45,  # 目盛ラベルの回転
    "tickfont": {  # 目盛ラベルのフォント
      "size": 14,  # サイズ
      "color": "rgba(80, 80, 80, 255)",  # 色
    },
    "tick0": "2021-10-01",  # 目盛の基準日
    "dtick": "M1",  # 表示間隔
    "tickformat": "%_y年%_m月",  # 表示フォーマット
    "rangeslider": {
      "visible":True,  # 下部のスライダーの表示
    },
    "rangeselector": {  # 表示範囲ボタン
      "buttons": [
        {
          "count": 2,  # 幅
          "label": "2m",  # ボタンのラベル
          "step": "month",  # 幅の単位
          "stepmode": "backward",  # 押下時の基準位置
        },
        {
          "count": 4,  # 幅
          "label": "4m",  # ボタンのラベル
          "step": "month",  # 幅の単位
          "stepmode": "backward",  # 押下時の基準位置
        },
      ]
    },
  }

  # 縦軸の設定
  yaxis = {
    "title": "売上 [袋]",  # 軸ラベル
    "titlefont": {  # 軸ラベルのフォント
      "size": 14,  # サイズ
      "color": "rgba(80, 80, 80, 255)",  # 色
    },
    "type": "linear",  # ログスケールに変更する場合は"log"
  }

  # グラフのレイアウトを変更
  fig.update_layout(
    title="果物の売上",  # タイトル
    xaxis=xaxis,  # 横軸
    yaxis=yaxis,  # 縦軸
    plot_bgcolor="rgba(240, 240, 240, 255)",  # 背景色
    barmode="stack",
  )

  # 表示
  config = {
    "editable": True,  # 軸名等を編集可能に
    "displayModeBar": True,  # メニューバーを常に表示
    "scrollZoom": True,  # スクロール操作でズーム
  }
  fig.show(
    config=config,  # 表示設定
  )

  # HTMLとして出力
  # pio.write_html(fig, "fruits.html")  # %pip install kaleido

  # 画像として出力
  pio.write_image(fig, "fruits_stacked_plotly.png")

  return fig

fig = generate_stacked_bar_plot_sample()

出力結果

上記のスクリプトを実行すると以下の積み上げ棒グラフが出力されます。

plotlyの積み上げ棒グラフ

上記はwrite_imageで出力した単なる画像ですが、スクリプトやJupyter Notebookなどからfig.show()を実行するとインタラクティブにグラフを操作することができます。

終わりに

このスクリプトには積み上げ棒グラフに関係しそうな設定項目をなるべく多く詰め込んでみました。細かな設定方法を逐一検索する手間を削減するためです。設定項目の抜け漏れがあれば更新していきたいと思います。

なお、著者は以下のバージョンのライブラリで実行を確認しました。

  • plotly==5.5.0
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ITベンチャーでデータ分析、AI開発、システム設計、提案、営業、組織管理、公演、採用などなど多数の役割に従事してきました。

様々な職業や背景の方々と交流するうちに、幅広い分野で問題を解決したり価値を生み出したりするためには、個別の知識だけでなく、汎用的に物事を考える力を伸ばしていく必要があると考えるようになりました。

更に、自分自身の考える力だけでなく、より多くの人々の考える力のトレーニングを応援することで、社会全体を良くしていけるのではないかと考えて、このサイトを作りました。

目次
閉じる