適用対象: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Plotly グラフィックス ライブラリでは、地理、科学、機械学習、3D、アニメーション、その他多くのグラフの種類など、高度なグラフ作成に役立つ最大 80 種類のグラフがサポートされています。 詳細については、「Plotly」を参照してください。
Kusto クエリ言語で Plotly ビジュアルをレンダリングするには、クエリで Plotly JSON を含む単一の文字列セル含むテーブルを生成する必要があります。 この Plotly JSON 文字列は、次の 2 つの方法のいずれかで生成できます。
- Python で独自の Plotly 視覚化を作成する
- 事前に準備された Plotly テンプレート を使用する
Python で独自の Plotly 視覚化を作成する
このメソッドでは、Plotly パッケージを使用して、Python で Plotly JSON 文字列を動的に作成します。 このプロセスでは、python() プラグインを使用する必要があります。 Python スクリプトは、インライン python() プラグインを使用して既存のノードで実行されます。 クライアント アプリケーションによってレンダリングされる Plotly JSON が生成されます。
すべての種類の Plotly 視覚化がサポートされています。
手記
最適なパフォーマンスを得るために、Python プラグイン イメージに最新バージョンの Python エンジン (現在 3.10.8) が含まれていることを確認します。 get_packages_version_fl() 関数で最新バージョンを確認します。 Python イメージをアップグレードするには、「クラスターで Python 言語拡張機能イメージを変更する」を参照してください。
例
次のクエリでは、インライン Python を使用して 3D 散布図を作成します。
OccupancyDetection
| project Temperature, Humidity, CO2, Occupancy
| where rand() < 0.1
| evaluate python(typeof(plotly:string),
```if 1:
import plotly.express as px
fig = px.scatter_3d(df, x='Temperature', y='Humidity', z='CO2', color='Occupancy')
fig.update_layout(title=dict(text="Occupancy detection, plotly 5.11.0"))
plotly_obj = fig.to_json()
result = pd.DataFrame(data = [plotly_obj], columns = ["plotly"])
```)
Plotly グラフィックス ライブラリでは、基本的なグラフ、科学、統計、財務、マップ、3D、アニメーションなど、最大 80 種類のグラフがサポートされています。 KQL で Plotly ビジュアルをレンダリングするには、クエリで Plotly JSON を含む 1 つの文字列セルを含むテーブル生成する必要があります。
このサービスでは Python を使用できないため、事前に準備されたテンプレートを使用してこの Plotly JSON を作成します。
事前に準備された Plotly テンプレートを使用する
このメソッドでは、データ オブジェクトをレンダリングする必要があるデータに置き換えることで、特定の視覚化用に事前に準備された Plotly JSON を再利用できます。 テンプレートは標準テーブルに格納でき、データ置換ロジックはストアド関数にパックできます。
現在サポートされているテンプレートは、plotly_anomaly_fl() と plotly_scatter3d_fl()です。 構文と使用方法については、次のドキュメントを参照してください。
例
let plotly_scatter3d_fl=(tbl:(*), x_col:string, y_col:string, z_col:string, aggr_col:string='', chart_title:string='3D Scatter chart')
{
let scatter3d_chart = toscalar(PlotlyTemplate | where name == "scatter3d" | project plotly);
let tbl_ex = tbl | extend _x = column_ifexists(x_col, 0.0), _y = column_ifexists(y_col, 0.0), _z = column_ifexists(z_col, 0.0), _aggr = column_ifexists(aggr_col, 'ALL');
tbl_ex
| serialize
| summarize _x=pack_array(make_list(_x)), _y=pack_array(make_list(_y)), _z=pack_array(make_list(_z)) by _aggr
| summarize _aggr=make_list(_aggr), _x=make_list(_x), _y=make_list(_y), _z=make_list(_z)
| extend plotly = scatter3d_chart
| extend plotly=replace_string(plotly, '$CLASS1$', tostring(_aggr[0]))
| extend plotly=replace_string(plotly, '$CLASS2$', tostring(_aggr[1]))
| extend plotly=replace_string(plotly, '$CLASS3$', tostring(_aggr[2]))
| extend plotly=replace_string(plotly, '$X_NAME$', x_col)
| extend plotly=replace_string(plotly, '$Y_NAME$', y_col)
| extend plotly=replace_string(plotly, '$Z_NAME$', z_col)
| extend plotly=replace_string(plotly, '$CLASS1_X$', tostring(_x[0]))
| extend plotly=replace_string(plotly, '$CLASS1_Y$', tostring(_y[0]))
| extend plotly=replace_string(plotly, '$CLASS1_Z$', tostring(_z[0]))
| extend plotly=replace_string(plotly, '$CLASS2_X$', tostring(_x[1]))
| extend plotly=replace_string(plotly, '$CLASS2_Y$', tostring(_y[1]))
| extend plotly=replace_string(plotly, '$CLASS2_Z$', tostring(_z[1]))
| extend plotly=replace_string(plotly, '$CLASS3_X$', tostring(_x[2]))
| extend plotly=replace_string(plotly, '$CLASS3_Y$', tostring(_y[2]))
| extend plotly=replace_string(plotly, '$CLASS3_Z$', tostring(_z[2]))
| extend plotly=replace_string(plotly, '$TITLE$', chart_title)
| project plotly
};
Iris
| invoke plotly_scatter3d_fl(x_col='SepalLength', y_col='PetalLength', z_col='SepalWidth', aggr_col='Class', chart_title='3D scatter chart using plotly_scatter3d_fl()')
| render plotly