Plotly 3D Line Plot (折れ線グラフ) の描き方

plotly使い方

 Plotly では 2次元のグラフだけではなく、3次元のグラフも描くことができます!
 前回の記事では、散布図の3次元版をまとめていきましたが、今回の記事では 折れ線グラフについてまとめていきます。
Plotly での書き方では、散布図と折れ線グラフは共通する部分が多いので、片方を理解できたらもう一方も理解しやすくなると思いますよ!!

スポンサーリンク

3D Line Plot (入門編)

 3次元のグラフってどんな感じになるの? と思う人もいると思うので、まず図をお見せすると、下のような図になります!
2次元平面のときと同様、自由に範囲選択や拡大・縮小、そして各プロット点の情報を見ることができます!
 さらに、回転についてもドラック操作で簡単にできますよ!!(応用編の方に、このブログ上からでも 動かせる図を載せたので、そちらでよかったら試してみてください!)

この記事で使用するデータ

 国別・年別の 人口あたりのGDP や 平均寿命 がまとめられたデータを使っていきます!
さらに、今回は continent (地域) 別に各年ごとに 人口あたりのGDP (gdpPercap), 平均寿命(lifeExp)の平均をとった値をそれぞれ y軸, z軸 として図示していきます。

3D Line Plot の 基本構造

 2次元の折れ線グラフの描き方と変わるところは2つだけです!
この違いを覚えておけると2次元グラフとほぼ同じ感覚でグラフが描けるところはいいですね~

  • メソッド名 Scatter3d : Scatterに3dがつくだけなので、覚えやすいですね!
    (Line Plot も Scatterメソッドで実装するので注意 !)
  • z 軸の追加 : z軸の設定は、x, y 軸と同じです!
        go.Scatter3d(
            x = df_plot['year'], # x軸の設定
            y = df_plot['gdpPercap'], # y軸の設定
            z = df_plot['lifeExp'], # z軸の設定
            mode = 'markers'     # mode = 'markers'で 点だけ表示 → 散布図に
        ) 

mode についての考え方も、2次元グラフと同じなので以前まとめた記事を紹介しておきます! もし、mode って何? markers, lines, textいろいろあるけどどういうことなんだろう?という人がいればこちらも合わせて読んでもらえたらと思います!

サンプルコード

# 平均寿命の分布
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

# データの準備 (大陸別)
df = px.data.gapminder()
df = df.groupby(['continent','year']).mean().reset_index()

# グラフの描画
# x : year
# y : 人口あたりの GDP
# z : 平均寿命

fig = go.Figure()
for continent in df['continent'].unique():
    df_plot = df[df['continent']==continent]
    fig.add_trace(
        go.Scatter3d(
            x = df_plot['year'],
            y = df_plot['gdpPercap'],
            z = df_plot['lifeExp'],
            mode = 'lines',
            name = continent
        ) 
    )


fig.show()
スポンサーリンク

3D Line Plot (応用編)

 上の3次元散布図に加えてより実践的な要素として、「各軸のタイトル設定」,「線の詳細設定」の2つのオプションを加えたものについてが下の図になります!
実際に、グラフを回転させたりして動かすこともできるので、試してみてくださいね!

1. 各軸のタイトル設定

 タイトルの設定で update_layout内で行うことは、2次元グラフと同じですが、3次元グラフではその中sceneを設定し、その内部で各軸のタイトルを記述します!

 タイトルの設定方法については、2次元グラフとほぼ同じで、Xaxis_title (X は x,y,z) で各軸のタイトルを設定することができます!

fig.update_layout(
    scene = dict(
        xaxis_title = 'year',
        yaxis_title = 'gdpPergap',
        zaxis_title = 'lifeExp'
    )
)

2. 線の詳細設定

 点の設定は、 go.Scatter3d メソッド内での line に辞書型で設定することができます!
具体的には以下の通り

  • width : 折れ線 の 太さ
lime = dict(
     width = 10
)

サンプルコード

# 平均寿命の分布
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

# データの準備 (大陸別)
df = px.data.gapminder()
df = df.groupby(['continent','year']).mean().reset_index()

# グラフの描画
# x : year
# y : 人口あたりの GDP
# z : 平均寿命

fig = go.Figure()
for continent in df['continent'].unique():
    df_plot = df[df['continent']==continent]
    fig.add_trace(
        go.Scatter3d(
            x = df_plot['year'],
            y = df_plot['gdpPercap'],
            z = df_plot['lifeExp'],
            mode = 'lines',
            name = continent
        ) 
    )


fig.show()

コメント

タイトルとURLをコピーしました