Выровнять по центру заголовок в диаграмме Пигала - PullRequest
3 голосов
/ 24 марта 2019

Я делаю линейный график в Пигале. Я хочу центрировать заголовок таблицы, но не знаю, как это сделать.

Я попытался просмотреть документацию Pygal, но не смог найти ничего, касающегося выравнивания названия. Вот что у меня есть:

enter image description here

custom_style = Style(
    background = 'transparent',
    font_family='Avenir',
    colors = ['#14A1FF', '#14FF47'],
    opacity = .5)

chart = pygal.Line(
    style=custom_style, 
    print_values=True, 
    interpolate='hermite', 
    fill=True, dots_size=4, 
    show_y_guides=False,
    legend_at_bottom=True,
    legend_at_bottom_columns=2)

chart.title = "Rubik's Cube Solve Times Recorded Over Five Days"
chart.x_labels = ["1", "2", "3", "4", "5"]
chart.x_title = "Day"
chart.y_title = "Seconds"
chart.add("Average of 100", ao100)
chart.add("Average of 25", ao25)
chart.render_to_file('times.svg')

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Как уже упоминалось в комментариях, заголовок рисунка центрирован относительно фигуры, а не по осям. Это поведение жестко задано в функциях рендеринга, нет параметров конфигурации, которые его изменят.

Один из способов - создать собственный класс, который наследует от 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, но оставьте остальной код как есть. Вы также можете изменить имя класса на что-то более значимое.

0 голосов
/ 24 марта 2019

По умолчанию у вашего заголовка есть свойство text-anchor:middle:

text-anchor атрибут используется для выравнивания (начальный, средний или end-alignment) строка текста относительно заданной точки.

Вы можете вручную изменить это значение , .i.e., На end в финальном файле SVG (откройте файл в текстовом редакторе и найдите .title).

...