Python の Plotly ライブラリ は、データの可視化を目的としています。
インタラクティブで高品質なグラフをオンラインで作成するのに役立ち、オフラインでも保存することができます。
この記事もチェック:PythonのPlotlyライブラリを使ってデータを地図上に表示させる方法
PythonにおけるPlotlyの必要性
Plotlyは統計解析やデータの可視化などの分野で有用です。
分析結果や予測結果をPlotlyを使うことで鮮やかな形で表現することができます。
Python Plotly を始めるにあたって
Plotlyライブラリを利用するために、まず pip コマンドを使用してインストールする必要があります。
Installation
Fake Tags
Fake tag
—Fake tag
Pythonの基本的なグラフ Plotly
PythonのPlotlyライブラリが提供する機能に飛び込んでみましょう。
このセクションでは、データの可視化の目的を果たすための基本的なプロット技法のいくつかをカバーします。
この記事もチェック:Pythonで使えるおススメのグラフ(プロット)ライブラリ4選
1. 散布図
その名の通り、データを散らばった形で表現します。
グラフへの入力として渡すランダムな値を生成するためにNumPyを使用しています。
例えば、以下の様になります。
pip install plotly==4.5.0
|
plotly.graph は JSON オブジェクト を含み、それは dict のような構造をしています。
このオブジェクトのいくつかのキーワードの値を更新することで、様々な種類のグラフをプロットすることができます。
上記のスニペットでは、plotly.graphのJSONオブジェクトはGと表現されています。
さらに、データの入力とプロットのために、NumPyを使用してランダムな値を生成しています。
オブジェクト.Scatter()`は、次元の値を提供するため、つまりトレースを作成するために使用され、グラフに追加したいと思う他の属性を設定するために便利です。
x と y パラメータには、x 軸と y 軸にプロットされる値が格納されます。
パラメータ mode は散布図の表現方法を決定します。
以下のいずれかの値を指定することができます。
- 線
- マーカ
- ライン+マーカー
- ライン+マーカー+テキスト
- なし
lines` は描画モードとして、線によって値をプロットします。
マーカー`は、分離されていないデータを点としてマークすることで値をプロットします。
plotly.offline はプログラマーがオフラインで値をプロットして保存できるようにします。
引数として、オフラインでプロットされたデータを表示する.htmlページであるファイル名を受け取ることができます。
結果は以下の通りです。
import plotly
import plotly.graph_objs as G
import numpy
num = 15
x = numpy.random.randn(num)
y = numpy.random.randn(num)
# Create a tracefollow = G.Scatter(
x = random_x,
y = random_y,
mode = 'markers'
)output = [follow]
plotly.offline.plot(output, filename='basic-scatter.html')
|
2. 線分-散布図
このタイプのプロットでは、データを表現するために、線と散布法の組み合わせが使われる。
import plotly
import plotly.graph_objs as G
import numpy as p
N = 20
x = p.linspace(0, 1, N)
one_y=p.random.randn(N)+10
two_y=p.random.randn(N)
three_y=p.random.randn(N)-10
# Create tracesplot0 = G.Scatter(
x = x,
y = one_y,
mode = 'markers'
)plot1 = G.Scatter(
x = x,
y = two_y,
mode = 'lines+markers'
)plot2 = G.Scatter(
x = x,
y = three_y,
mode = 'lines'
)output = [plot0, plot1, plot2]
plotly.offline.plot(output, filename='line-scatter.html')
|
上記のコードでは、x次元に等間隔な値を生成するために numpy.linespace() 関数を使用しています。
さらに、numpy.random()関数を使用して、y軸を通して3つの異なるトレースに対してランダムな値を生成しています。
上述したように、描画方法の種類を表すパラメータ mode に異なる値を渡しています。
line+markers`は値を表現し、線とマーカードットの組み合わせでプロットします。
出力は以下の通りです。
import plotly.graph_objects as G
img = G.Figure(data=G.Scatter(
x=[10, 20, 30, 40],
y=[5, 10, 15, 20],
mode='markers',
marker=dict(size=[10,20,30,40],
color=[1, 2, 3, 4])
))img.show() |
3. バブル散布図
import plotly.graph_objects as G
import numpy
a = numpy.random.randn(100) - 10
b = numpy.random.randn(100) + 10
output = G.Figure()
output.add_trace(G.Box(y=a))
output.add_trace(G.Box(y=b))
output.show() |
markerは、データを表現するためのシンボルを設定する dict です。
size は描画シンボルに寸法を渡すために使用し、 color はそれらの描画シンボルに色を付けるための値を設定するために使用します。
plotly.Figure() 関数は基本的にデータと描画レイアウトの値を持ち、この両方の値を組み合わせて図を作成します。
データとレイアウトの値はグラフオブジェクトまたはディクショナリで表現されます。
plotly.show() 関数は、図とそのレイアウトデザインをプロットするために使用されます。
結果は以下の通りです。
import plotly.graph_objects as G
import numpy as N
x = N.random.randn(100)
output = G.Figure(data=[G.Histogram(x=x)])
output.show() |
統計スタイルチャート
この種のグラフは、データをより簡略化して表示するのに役立ちます。
1. ボックスプロット
import plotly.figure_factory as ff
import numpy as N
x = N.random.randn(500)
data = [x]
label = ['DISTPLOT']
output = ff.create_distplot(data, label)
output.show() |
plotly.add_trace() 関数は、x と y の次元にトレースを追加してグラフを更新するために使用されます。
トレースするグラフオブジェクト(G.Scatter、G.Boxなど)をパラメータとして受け取ります。
例えば、 G.Scatter, G.Box などです。
plotly.graph.object.Box() は基本的に、トレースの値を特定の次元に設定します。
出力は以下の通りです。
import plotly.graph_objects as G
from plotly.subplots import make_subplots
z = [[2, 4, 7, 12, 13, 14, 15, 16],
[3, 1, 6, 11, 12, 13, 16, 17],
[4, 2, 7, 7, 11, 14, 17, 18],
[5, 3, 8, 8, 13, 15, 18, 19],
[7, 4, 10, 9, 16, 18, 20, 19],
[9, 10, 5, 27, 23, 21, 21, 21],
[11, 14, 17, 26, 25, 24, 23, 22]]
out = make_subplots(rows=1, cols=1)
out.add_trace(G.Contour(z=z))
out.show() |
2. ヒストグラム
import plotly.graph_objects as G
out = G.Figure(data=G.Heatmap(
z=[[10, 20, 30],
[20, 30, 40],
[40, 50, 60]]))
out.show() |
ヒストグラムを作成するには,plotly.graph.object.Histogram()を用います.
出力は以下の通りです.
import plotly.express as px
import pandas as pd
df = pd.read_csv('C:UsersHPDesktopoutput11.csv')
fig = px.line(df, x='Marks', y='Sr no')
fig.show() |
3. DistPlots
Distplot は分布していないデータをプロットするのに役立ち、折れ線グラフを通して値を観察することができる。
import plotly.express as px
sr = [1,2,3,4,5,6]
marks = [20, 10, 50, 30, 100, 75]
fig = px.line(x=marks, y=sr)
fig.show() |
PythonのAPIには、データを簡単にプロットするためのモジュール figure factory が含まれています。
figure_factory.distplot()は、データをヒストグラムや正規曲線などの組み合わせで表現するようにプロットします。
label パラメータは、グラフにテキストラベルを設定するために使用されます。
結果は、以下の通りです。
import plotly.express as p
data = dict(
num=[25, 50, 75, 100],
work=["Requirement Analysis", "Design", "Modelling and Construction", "Testing and Deployment"])
out = p.funnel(data, x='num', y='work')
out.show() |
サイエンティフィックチャート
科学的な数値やデータを広い視野で分析するのに役立つグラフです。
1. カウンタープロット
カウンタープロットは、基本的に膨大な量のデータをまとめて科学的に分析する際に使用される。
import plotly.graph_objects as G
import numpy as N
n = 100
figure = G.Figure(data=[G.Mesh3d(x=(55*N.random.randn(n)),
y=(50*N.random.randn(n)),
z=(25*N.random.randn(n)),
opacity=0.8,
color='rgba(244,22,100,0.6)'
)])
figure.show() |
plotly.subplots モジュールは、 make_subplots() 関数を使用して、データの多数のサブプロットを作成することができます。
また、 plotly.graph.objects.Contour() は、与えられた入力配列から等高線を作成するために使用されます。
結果は以下の通りです。

2. Plotlyにおけるヒートマップ
ヒートマッププロットでは、入力に渡された各値はピクセルとして表現されます。
同じように、ヒートマップも科学的な数値や研究の分析を強化するために使用することができます。

plotly.graph.obejct.Heatmap()` 関数は、基本的に入力データの各値をヒートマップピクセルとして表現します。
結果を出力すると、以下の様になります。

財務プロット
これらは、リアルタイムの分析をより良い方法で形成し、描写するための最も複雑なチャートの1つと考えることができます。
1. 時系列チャート
以下のコードでは、PandasモジュールでCSVファイルを読み込み、時系列グラフをプロットしています。

使用したファイルは、シリアル番号(SR No)とマークの2列からなる単純なファイルです。
どの軸がどの列のデータを使っているかで、自動的にプロットされます。
2列のデータのCSVファイルであれば、同じように試すことができます。

結果は以下の通りです。

また、以下のように2つのリストの形式でデータを提供することもできます。
折れ線グラフがどのように形成されるかを示すために、いくつかのランダムな値を提供しています。

結果は以下の通りです。

全体的に高品質で簡素化されたグラフを提供するために、 plotly.express パッケージ が使用されています。
plotly.express.line() 関数は、与えられた値とラベルにしたがって x と y の次元に線を描くために使われます。
2. ファネルチャート
ファネルチャートは、ビジネス開発プロセスに類似したステージの異なるフォームでデータを表現することができる。

express.funnel() 関数は、入力データフレームの各行をファネルのステージとして表現します。
ここでは、入力された数字と作業をファネル構造の形で表現しています。
出力は以下の通りです。

上記のように、チャートは開発のステージとそれに関連する値を描いています。
3D チャート

plotly.graph.object.Mesh3d() は、データを頂点 x, y, z を持つ3次元の描画構造として表現します。
結果は、以下の通りです。

まとめ
以上、PythonのPlotlyライブラリが提供する機能を理解しました。