Как уже упоминалось в комментариях, заголовок рисунка центрирован относительно фигуры, а не по осям. Это поведение жестко задано в функциях рендеринга, нет параметров конфигурации, которые его изменят.
Один из способов - создать собственный класс, который наследует от pygal.Line
и переопределяет функцию, которая отображает заголовок (который не очень большой):
class MyLineChart(pygal.Line):
def __init__(self, *args, **kwargs):
super(MyLineChart, self).__init__(*args, **kwargs)
def _make_title(self):
"""Make the title"""
if self._title:
for i, title_line in enumerate(self._title, 1):
self.svg.node(
self.nodes['title'],
'text',
class_='title plot_title',
x=self.margin_box.left + self.view.width / 2, # Modified
y=i * (self.style.title_font_size + self.spacing)
).text = title_line
Вышеприведенная функция _make_title
была скопирована прямо из исходного кода для Graph
класса (класса, от которого наследуется Line
). Единственное изменение в строке, обозначенной комментарием «Изменено», это было взято из функции, которая отображает метку оси x (потому что она центрирована по осям).
С этим вы можете заменить chart = pygal.Line
на chart = MyLineChart
, но оставьте остальной код как есть. Вы также можете изменить имя класса на что-то более значимое.