2025, Nov 29 15:01

Читаемые заголовки осей в Plotly graph_objects через go.Layout

Пошагово показываем, как задать заголовки осей в Plotly graph_objects через go.Layout: используйте xaxis.title.text и yaxis.title.text. Пример на Python.

Настроить читаемые заголовки осей в Plotly легко с plotly express, но при переходе на graph_objects и ручной сборке go.Figure путь уже не так очевиден. Если вы строите что‑то своё, например экспоненциальный спад, и хотите явно управлять подписями, вот как аккуратно сделать это внутри go.Layout.

Проблема

У вас есть go.Figure, и вы хотите добавить собственные заголовки к осям x и y. График отображается, но осям не хватает информативных подписей.

import numpy as np
import plotly.graph_objects as gobj
import plotly.io as pio
pio.templates.default = "none"

xs = np.linspace(0, 10, 100)

curve = gobj.Scatter(
    x=xs,
    y=100 * pow(1/2, xs),
    mode='lines',
    line_width=2,
    line_color='red',
)

layout_base = gobj.Layout(title='My Graph')

plot_obj = gobj.Figure(data=[curve], layout=layout_base)

# need custom axis titles here

plot_obj.show()

Что происходит и почему

В graph_objects заголовки осей входят в дерево макета. Для осей x и y в go.Layout существуют отдельные блоки настроек. Подписи осей задаются в полях xaxis.title.text и yaxis.title.text. Если их не указать, оси будут отображены без пользовательских заголовков.

Решение

Передайте настройки xaxis и yaxis при создании макета и поместите строки с подписями во вложенные поля title.text. Такой подход удерживает всё в пределах go.Layout и явно показывает, где хранится метаинформация об осях.

import numpy as np
import plotly.graph_objects as gobj
import plotly.io as pio
pio.templates.default = "none"

xs = np.linspace(0, 10, 100)

curve = gobj.Scatter(
    x=xs,
    y=100 * pow(1/2, xs),
    mode='lines',
    line_width=2,
    line_color='red',
)

custom_layout = gobj.Layout(
    title='My Graph',
    xaxis={
        "title": {
            "text": "My custom x axis title"
        }
    },
    yaxis={
        "title": {
            "text": "My custom y axis title"
        }
    }
)

plot_obj = gobj.Figure(data=[curve], layout=custom_layout)

plot_obj.show()

Если вам ближе синтаксис с dict(), эквивалентный вариант выглядит так и работает так же:

import numpy as np
import plotly.graph_objects as gobj
import plotly.io as pio
pio.templates.default = "none"

xs = np.linspace(0, 10, 100)

curve = gobj.Scatter(
    x=xs,
    y=100 * pow(1/2, xs),
    mode='lines',
    line_width=2,
    line_color='red',
)

custom_layout = gobj.Layout(
    title='My Graph',
    xaxis=dict(
        title=dict(text="My custom x axis title")
    ),
    yaxis=dict(
        title=dict(text="My custom y axis title")
    )
)

plot_obj = gobj.Figure(data=[curve], layout=custom_layout)

plot_obj.show()

Зачем это важно

Заголовки осей — не украшение; они фиксируют замысел. Когда вы собираете графики на graph_objects — особенно для математических кривых вроде экспоненциального спада — подписи предотвращают неверное толкование, делают сравнения надёжными и сохраняют самодостаточность графиков в ноутбуках, отчётах или дашбордах.

Итоги

В go.Figure задавайте заголовки осей прямо в go.Layout, используя xaxis.title.text и yaxis.title.text. Размещение подписей в макете делает конфигурацию прозрачной и переносимой между графиками, одновременно сохраняя полный контроль над тем, как оси читаются и отображаются.