Поделиться через


График (предварительная версия)

Применимо: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Библиотека графики поддерживает типы диаграмм ~80, которые полезны для расширенной диаграммы, включая географическое, научное, машинное обучение, 3d, анимацию и многие другие типы диаграмм. Дополнительные сведения см. в разделе График.

Чтобы отрисовка визуального элемента на языке запросов Kusto, запрос должен создать таблицу с одной строковой ячейкой, содержащей графики JSON. Эту строку JSON-кода графики можно создать одним из следующих двух методов:

Создание собственной визуализации графики в Python

В этом методе вы динамически создаете строку Json в Графике в Python с помощью пакета Графики. Для этого процесса требуется использовать подключаемый модуль python() . Скрипт Python выполняется на существующих узлах с помощью встроенного подключаемого модуля Python(). Он создает json графики, отрисовываемый клиентским приложением.

Поддерживаются все типы визуализаций графиков.

Заметка

Для повышения производительности убедитесь, что образ подключаемого модуля Python содержит последнюю версию подсистемы Python (в настоящее время — 3.10.8). Проверьте последнюю версию с помощью функции get_packages_version_fl(). Сведения об обновлении образа Python см. в статье Изменение образа расширений языка Python в кластере.

Пример

Следующий запрос использует встроенный Python для создания трехмерной точечной диаграммы:

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"])
```)

снимок экрана: графический тип.

Библиотека графики поддерживает около 80 типов диаграмм, включая основные диаграммы, научные, статистические, финансовые, карты, трехмерные, анимации и многое другое. Чтобы отрисовка визуального элемента в KQL, запрос должен создать таблицу с одной строковой ячейкой, содержащей JSON.

Так как python недоступен в этой службе, вы создаете этот JSON-файл Графики с помощью предварительно подготовленных шаблонов.

Использование предварительно созданного шаблона Графики

В этом методе предварительно подготовленный 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

снимок экрана с выходными данными в примере графика.