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. Размещение подписей в макете делает конфигурацию прозрачной и переносимой между графиками, одновременно сохраняя полный контроль над тем, как оси читаются и отображаются.