Выровнять по центру заголовок в диаграмме Пигала

Меня удивляет, что это еще не упоминалось, поэтому для полноты ...

Вы можете выполнить распаковку списка с помощью оператора «splat»: *, который также будет скопируйте элементы вашего списка.

old_list = [1, 2, 3]

new_list = [*old_list]

new_list.append(4)
old_list == [1, 2, 3]
new_list == [1, 2, 3, 4]

Очевидным недостатком этого метода является то, что он доступен только в Python 3.5 +.

Сроки, однако, это работает лучше, чем другие распространенные методы.

x = [random.random() for _ in range(1000)]

%timeit a = list(x)
%timeit a = x.copy()
%timeit a = x[:]

%timeit a = [*x]

#: 2.47 µs ± 38.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.47 µs ± 54.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.39 µs ± 58.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

#: 2.22 µs ± 43.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3
задан pcu 24 March 2019 в 05:07
поделиться

2 ответа

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

Одним из обходных путей является создание собственного класса, который наследует от 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
ответ дан mostlyoxygen 24 March 2019 в 05:07
поделиться

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

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

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

0
ответ дан pcu 24 March 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: