カテゴリー

Plotly全般

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

2021年8月4日

こんな人にオススメ

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

ということで、今回は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でグ} ...

続きを見る

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&ボタン】plotlyのupdatemenusに2回押し対応のbuttonsを追加

こんな人にオススメ plotlyでボ| ...

続きを見る

とっかかりには最適

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

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

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

関連記事

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

こんな人にオススメ plotlyのと{ ...

続きを見る

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

こんな人にオススメplotlyを使Ӗ ...

続きを見る

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

こんな人にオススメ plotlyでは| ...

続きを見る

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

こんな人にオススメ 今までpyt ...

続きを見る

スイッチボット

2022/11/28

【SwitchBotロックレビュー】これからのスタンダードになりうるスマートロック

こんな人にオススメ SwitchBotからスマートロック「SwitchBotロック」が発売された ...

生活に役立つ

2022/11/28

【メガネ厳選】クソ便利に使っているサービスやアイテム達

このページでは執筆者「メガネ」が実際に使って便利だと感じているサ ...

マウス

2022/9/11

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

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

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

2022/11/21

【ながら聴きイヤホン比較】SONY LinkBuds、ambie、BoCoはどれがおすすめ?

こんな人におすすめ 耳を塞がない開放型のイヤホンに完全ワイヤレスӟ ...

macOSアプリケーション

2022/10/15

【M1 Mac】MacBook Proに入れている便利でニッチなアプリを21個紹介する

こんな人におすすめ MacBookを購入してLINEとか必要最低限のアプリは入れた。 ...

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

2022/10/23

【SENNHEISER MOMENTUM True Wireless 3レビュー】高レベルでバランス型の高音質イヤホン

こんな人におすすめ SENNHEISER MOMENTUM True Wireless 3って実際のところどうなの? 評判は良い ...

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

2022/11/21

【SONY WF-1000XM4レビュー】神とゴミのハーフ&ハーフ

こんな人におすすめ SONYのフラグシップモデル「SONY WF-1000XM4」ってどれくらい性 ...

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

2022/8/19

【Nothing ear (1)レビュー】ライトな完成度、アップデートに期待

こんな人にオススメ 完全ワイヤレスイヤホン(TWS)でスケルトンボディ ...

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

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

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

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

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

  • この記事を書いた人

メガネ

ベンチャー企業のWebエンジニア駆け出し。独学のPythonで天文学系の大学院を修了→新卒を1.5年で辞める→転職→今に至る。
常時金欠のガジェット好きでM1 MacBook Pro x Galaxy S22 Ultraの狂人。
人見知りで根暗だったけど、人生楽しもうと思って良い方向に狂う→人生が楽しい

ガジェットのレビューとPythonコードを記事にしています。ぜひ楽しんでください🦊
自己紹介と半生→変わって楽しいの繰り返し

-Plotly全般
-, ,