plotlyで散布図を作成するPythonスクリプトを紹介します。散布図に関係する設定項目を一覧できるように全て詰め込みました。不要な設定は変更または削除してご利用ください。
なお、下記のスクリプトはplotly.express
を使わないやり方です。
目次
スクリプト全文
import plotly.graph_objects as go import plotly.io as pio def generate_scatter_plot_sample(): """ plotlyで散布図を生成するサンプル。 備忘録として、主要な設定項目を全て活用する。 """ # 可視化するデータのサンプル # 氏名 name_dict = { "1年1組": ["池田", "佐藤", "高橋", "松本"], "1年2組": ["加藤", "鈴木", "中村"], } # 成績 japanese_score_dict = { "1年1組": [82, 44, 78, 63], "1年2組": [67, 94, 54], } math_score_dict = { "1年1組": [78, 95, 62, 43], "1年2組": [81, 72, 69], } # 点の色 color_dict = { "1年1組": "rgba(255, 144, 0, 255)", "1年2組": "rgba(0, 221, 51, 255)", } # マーカーの設定 https://plotly.com/python/marker-style/ marker_line = { "color": "black", # 色 "width": 2, # 太さ } markers = { "1年1組": { "color": "rgba(255, 144, 0, 255)", # 色 "size": 18, # サイズ "opacity": 1.0, # 透明度 "symbol": "circle", # 形 "line": marker_line, # 線の設定 }, "1年2組": { "color": "rgba(0, 221, 51, 255)", # 色 "size": 18, # サイズ "opacity": 0.8, # 透明度 "symbol": "star", # 形 "line": marker_line, # 線の設定 }, } # plotly.graph_objects.Figureの生成 fig = go.Figure() # クラスごとに描画 for cls in ["1年1組", "1年2組"]: # clsのデータを一時保存 name_list = name_dict[cls] japanese_score_list = japanese_score_dict[cls] math_score_list = math_score_dict[cls] color = color_dict[cls] marker = markers[cls] # 折れ線を追加 fig.add_trace( go.Scatter( name=cls, # データの名称(凡例に表示) x=japanese_score_list, # 横軸の値のリスト y=math_score_list, # 縦軸の値のリスト text=name_list, # マーカーに記載するテキスト mode="markers+text", # 線・マーカー・テキストの有無 marker=marker, # マーカーの設定 textposition="top center", # テキストの位置 )) # 横軸の設定 xaxis = { "title": "国語", # 軸ラベル "titlefont": { # 軸ラベルのフォント "size": 14, # サイズ "color": "rgba(80, 80, 80, 255)", # 色 }, "tickangle": 45, # 目盛ラベルの回転 "tickfont": { # 目盛ラベルのフォント "size": 14, # サイズ "color": "rgba(80, 80, 80, 255)", # 色 }, "dtick": 5, # 表示間隔 "tickformat": "", # 表示フォーマット "range": (40, 100), # 表示範囲 } # 縦軸の設定 yaxis = { "title": "数学", # 軸ラベル "titlefont": { # 軸ラベルのフォント "size": 14, # サイズ "color": "rgba(80, 80, 80, 255)", # 色 }, "type": "linear", # ログスケールに変更するなら"log" "range": (40, 100), # 表示範囲 } # グラフのレイアウトを変更 fig.update_layout( title="1年生の期末テストの点数", # タイトル xaxis=xaxis, # 横軸 yaxis=yaxis, # 縦軸 plot_bgcolor="rgba(240, 240, 240, 255)", # 背景色 ) # 60点以下は補習として、補習範囲を明示 # Scatterを利用してグラフに多角形を追加 line = { "width": 0, } fig.add_trace( go.Scatter( name="補習範囲", # 名称 x=(0, 0, 60, 60, 100, 100), # 範囲の点列 y=(0, 100, 100, 60, 60, 0), # 範囲の点列 opacity=0.1, # 透明度 fill="toself", # 塗りつぶしの方法 fillcolor="rgba(255, 0, 0, 255)", # 内部の色 mode="lines", # 線・マーカー・テキストの有無 line=line, # 枠線の設定 showlegend=False, # 凡例に追加しない )) # 表示 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, "test.png") return fig fig = generate_scatter_plot_sample()
出力結果
上記のスクリプトを実行すると以下の折れ線グラフが出力されます。
上記はwrite_image
で出力した単なる画像ですが、スクリプトやJupyter Notebookなどからfig.show()
を実行するとインタラクティブにグラフを操作することができます。
終わりに
このスクリプトには散布図に関係しそうな設定項目をなるべく多く詰め込んでみました。細かな設定方法を逐一検索する手間を削減するためです。設定項目の抜け漏れがあれば更新していきたいと思います。
なお、著者は以下のバージョンのライブラリで実行を確認しました。
- plotly==5.5.0
あわせて読みたい

matplotlibで散布図を作成するための全設定
matplotlibで散布図を作成するPythonスクリプトを紹介します。このスクリプトには散布図に関係する設定項目を全て詰め込みました。