在Pygal图表中居中对齐标题

时间:2019-03-24 02:49:37

标签: python svg pygal

我正在用Pygal制作折线图。我想将图表标题居中,但我不知道该怎么做。

我尝试浏览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 :(得分:0)

默认情况下,标题的属性为text-anchor:middle

  

text-anchor属性用于对齐(开始,中间或   末端对齐)相对于给定点的文本字符串。

您可以在结局svg文件(在文本编辑器中打开文件并找到end)中手动change this value,即.title

答案 1 :(得分:0)

如注释中所述,图形标题相对于图形居中,而不是轴。此行为在呈现功能中进行了硬编码,没有配置选项可以更改。

一种解决方法是创建自己的类,该类继承自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函数是直接从the source code for the Graph classLine本身继承的类)中复制的。唯一的更改是在注释为“已修改”的行中进行了更改,该更改来自呈现x轴标签的函数(因为该居中位于轴上)。

使用此方法,您可以将chart = pygal.Line替换为chart = MyLineChart,但其余代码保持不变。您可能还想将类的名称更改为更有意义的名称。