カテゴリー

Plotly全般

【plotly&グラフテーマ】plotly既存のthemasをグラフ化

2021年8月4日

こんな人にオススメ

plotlyでグラフを描くときのテンプレートを自分で作成するのが面倒。何か楽にキレイなグラフを描く方法はないの?

ということで、今回はplotlyでグラフを描く際に簡単にグラフの見た目、スタイルを変更する方法について解説する。どうするかというと、規定のテーマを選択するということ。

執筆者の場合は色んなこと対してカスタムすることが好きということで自作でテーマを作成している。しかし、それが面倒とかplotlyを始めたばかりという方もいるだろう。

そんな方は本記事で簡単にグラフのテーマを変更していただければ幸いだ。なお、自作テンプレートについては以下参照。

【随時更新 備忘録】plotlyのグラフ即席作成コード

続きを見る

python環境は以下。

  • Python 3.9.4
  • numpy 1.20.3
  • plotly 4.14.3
  • plotly-orca 3.4.2

運営者のメガネです。YouTubeTwitterInstagram、自己紹介はこちら、お問い合わせはこちらから。

運営者メガネ

下準備

import sys
import numpy as np
import plotly.io as pio
import plotly.graph_objects as go
sys.path.append('../../')
import plotly_layout_template as template

まずは下準備としてのimport関連。numpyは後に作るグラフで使用するデータ作成用。plotly_layout_templateは本記事で作成するグラフとかのコードの2つ上のディレクトリにある、自作テンプレート。

今回はconfigを追加するために使用。configについては以下参照。

【plotly&config】グラフのツールバーを編集する

続きを見る

plotlyのグラフテーマを知る

print(pio.templates)
# Templates configuration
# -----------------------
#     Default template: 'plotly'
#     Available templates:
#         ['ggplot2', 'seaborn', 'simple_white', 'plotly',
#          'plotly_white', 'plotly_dark', 'presentation', 'xgridoff',
#          'ygridoff', 'gridon', 'none']

print(type(pio.templates))
# <class 'plotly.io._templates.TemplatesConfig'>

plotlyのグラフテーマはいくつか種類があって、どんなものがあるのかを確認するにはpio.templatesとすればいい。そうすると上のコードのようにズラーと出力される。

デフォルトのテーマはplotlyというもので、テンプレートを使用していない時に出てくる紫っぽい青っぽい背景のテーマだ。その他のテーマの選択肢は10種類ある。

テーマの値を取り出し

themes = pio.templates

print(themes.items())
# dict_items([('ggplot2', <object object at 0x11702ad20>), ('seaborn', <object object at 0x11702ad20>), ('simple_white', <object object at 0x11702ad20>), ('plotly', <object object at 0x11702ad20>), ('plotly_white', <object object at 0x11702ad20>), ('plotly_dark', <object object at 0x11702ad20>), ('presentation', <object object at 0x11702ad20>), ('xgridoff', <object object at 0x11702ad20>), ('ygridoff', <object object at 0x11702ad20>), ('gridon', <object object at 0x11702ad20>), ('none', <object object at 0x11702ad20>)])

テーマはdictっぽい感じで取り出すことが可能。上のコードではとりあえず.itemskeysvaluesの両方出した。前半は先程のテーマ名だが後半は執筆者はあまり理解していない。出力するごとに数字部分の値が変わる。多分16進数だからメモリ関係か?

dictっぽく扱うことができるということで、.keysでテーマ名を取りだし。初めにpio.templatesで出力した使用可能なテーマ(Available templates)が出力。

print(themes.keys())
# dict_keys(['ggplot2', 'seaborn', 'simple_white', 'plotly', 'plotly_white', 'plotly_dark', 'presentation', 'xgridoff', 'ygridoff', 'gridon', 'none'])

しかし、.values()は使用できないようだ。あくまでもdictっぽく扱うだけ。

print(themes.values())
#     print(themes.values())
# AttributeError: 'TemplatesConfig' object has no attribute 'values'

dictっぽく扱うことができるということで、最後に名称一覧listで、各名称をforを使って1つずつ出力してみる。

print(list(themes))
# ['ggplot2', 'seaborn', 'simple_white', 'plotly', 'plotly_white', 'plotly_dark', 'presentation', 'xgridoff', 'ygridoff', 'gridon', 'none']

for theme in themes:
    print(theme)
# ggplot2
# seaborn
# simple_white
# plotly
# plotly_white
# plotly_dark
# presentation
# xgridoff
# ygridoff
# gridon
# none

各テーマをグラフ化

colors = (
    'white',
    'silver',
    'black',
    'red',
    'blue',
    'green',
    'yellow',
    'violet',
)

x = np.arange(5)
y = x

ということでこれからテーマごとにグラフを作成するが、まずはグラフ関連の下準備。変数colorsは今回プロットするグラフの色を示す。色々な色のテーマを使用するので、プロットの色も豊富に。

今回プロットするデータは直線データで色ごとにズラしながら作成する。実際にテーマごとにグラフを作成するためのコードが以下。

# 各テーマを使用したグラフを作成
def plotly_themes():

    for theme in themes:
        plot = []
        for num, color in enumerate(colors):

            d = go.Scatter(
                x=x, y=y + num,
                name=color,
                line_color=color,
            )
            plot.append(d)

        layout = go.Layout(
            template=theme,
            title=dict(text=theme),
        )

        fig = go.Figure(data=plot, layout=layout)
        fig.show()

        name = f"plot_themes_{theme}"
        pio.write_html(
            fig, f"{name}.html",
            auto_open=False, config=template.plotly_config(),
        )
        pio.write_image(fig, f"{name}.png")

plotly_themes()

グラフのテーマはgo.Layouttemplate引数で行う。ここに先程のpio.templatesを入れたら完了。以下よりそれぞれのテーマで作成できるグラフをプロットする。

ggplot2


seaborn


simple_white


plotly


plotly_white


plotly_dark


presentation


xgridoff


ygridoff


gridon


none


ボタンを使ってテーマを切り替えたい(失敗)


def plotly_themes_buttons():

    plot = []
    # for theme in themes:
    for num, color in enumerate(colors):

        d = go.Scatter(
            x=x, y=y + num,
            # name=f"{theme}|{color}",
            name=color,
            line_color=color,
        )
        plot.append(d)

    #  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    # ボタンの内容を作成
    buttons = []
    for num, theme in enumerate(themes):

        button = dict(
            label=theme,
            method='update',
            args=[
                dict(),
                dict(title=theme, template=theme),
            ],
        )
        buttons.append(button)

    updatemenus = [
        dict(
            type='buttons',
            direction="right",
            x=0.5, y=1.01, xanchor='center', yanchor='bottom',
            active=0,
            buttons=buttons,
        )
    ]

    #  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    layout = go.Layout(
        template=theme,
        title=dict(text=theme),
        updatemenus=updatemenus,
    )

    fig = go.Figure(data=plot, layout=layout)
    fig.show()

    name = 'plot_themes_buttons'
    pio.write_html(
        fig, f"{name}.html",
        auto_open=False, config=template.plotly_config(),
    )
    pio.write_image(fig, f"{name}.png")

plotly_themes_buttons()

最後にplotlyのボタン機能を使用してテーマを切り替える方法について解説したかった。が、どうもボタンを使って切り替えることができない。通常のgo.Layoutの引数ならこれでいけるけどなんか無理。

ということで失敗作が上のグラフ。ボタンについては以下参照。

【plotly&ボタン】plotlyのupdatemenusにbuttonsを追加

続きを見る

【plotly&ボタン】plotlyのupdatemenusに2回押し対応のbuttonsを追加

続きを見る

とっかかりには最適

今回はplotlyで使用できる既存のテーマについて解説した。これを知ったのは最近で、こんなに簡単にできるのかという印象。実はこのpio.templates関連で自分でデフォルトテーマを作成することが可能らしい。

今回は既存テーマということでまだ勉強していないが、一回これはチャレンジしてみたい。

既存でそれなりにキレイなグラフを作成できるので、初めてのplotlyとかサクッとキレイにしたい人におオススメ。

関連記事

【plotly&go.Scatter】plotlyの散布図グラフの描き方

続きを見る

bubblechart2017_pop
【plotly&バブルチャート】plotlyで各国の収入と平均寿命をバブルチャートで描く

続きを見る

【plotly&スライダー】plotlyのslidersにスライダーを追加

続きを見る

【plt vs plotly】matplotlibとgoでグラフの比較

続きを見る

ガジェット

2023/9/18

【デスクツアー2022下半期】モノは少なく、でも効率的に Desk Updating #0

今回はガジェットブロガーなのにデスク環境を構築していない執筆者の ...

ライフハック

2023/9/16

【Audible vs YouTube Premium】耳で聴く音声学習コンテンツを比較

ワイヤレスイヤホンが普及し耳で学習することへのハードルが格段に下 ...

完全ワイヤレスイヤホン(TWS)

2023/9/18

【SENNHEISER MOMENTUM True Wireless 3レビュー】全てが整ったイヤホン

今回は高音質・高機能なSENNHEISERのフラグシップ完全ワイヤレスイヤホン「SENNH ...

ライフハック

2023/3/11

【YouTube Premiumとは】メリットしかないから全員入れ

今回はYouTube Premiumを実際に使ってみてどうなのか、どんなメリット/デメリット ...

マウス

2023/8/17

【Logicool MX ERGOレビュー】疲れない作業効率重視トラックボールマウス

こんな人におすすめ トラックボールマウスの王道Logicool MX ERGOが気になるけどऩ ...

ベストバイ

2023/9/18

【ベストバイ2022】今年買って良かったモノのトップ10

2022年ベストバイ この1年を振り返って執筆者は何を買ったのか。ガジェッ& ...

スマホ

2023/1/15

【楽天モバイル×povo2.0の併用】月1,000円の保険付きデュアルSIM運用

こんな人におすすめ 楽天モバイルとpovo2.0のデュアルSIM運用って実際のとこ ...

マウス

2023/9/16

【Logicool MX ERGO vs MX Master 3】ERGOをメインにした決定的な理由

こんな疑問・お悩みを持っている人におすすめ 執筆者はLogicoolのハイエンӠ ...

macOSアプリケーション

2022/9/30

【Chrome拡張機能】便利で効率的に作業できるおすすめの拡張機能を18個紹介する

こんな人におすすめ Chromeの拡張機能を入れたいけど、調べても同じような ...

macOSアプリケーション

2023/5/3

【Automator活用術】Macで生産性を上げる作業の自動化術

今回はMacに標準でインストールされているアプリ「Automator」を使ってできる ...

Pythonを学びたいけど独学できる時間なんてない人へのすゝめ

執筆者は大学の研究室・大学院にて独学でPythonを習得した。

でも社会人になったら独学で行うには時間も体力もなくて大変だ。

時間がない社会人だからこそプロの教えを乞うのが効率的。

ここでは色んなタイプに合ったプログラミングスクールの紹介をする。

  • この記事を書いた人

メガネ

Webエンジニア駆け出し。独学のPythonで天文学系の大学院を修了。常時金欠のガジェット好きでM2 Pro MacBook Pro(30万円) x Galaxy S22 Ultra(17万円)使いの狂人。自己紹介と半生→変わって楽しいの繰り返しレビュー依頼など→お問い合わせ運営者情報、TwitterX@m_ten_pa、 YouTube@megatenpa、 Threads@megatenpa

-Plotly全般
-, ,