【问题标题】:Center-align title in Pygal chartPygal图表中的中心对齐标题
【发布时间】:2019-08-14 15:54:20
【问题描述】:

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

我尝试查看 Pygal 文档,但找不到与标题对齐相关的任何内容。这是我所拥有的:

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')

【问题讨论】:

  • 当然,正如您所说,文档中没有任何明显的内容。在我看来,您只能获得默认位置,即中心。看起来 X 和 Y 标题相对于轴居中,但图形标题在整个图形中居中(因此轴 + y 轴标题和刻度标签)。这使它看起来偏离中心。这在他们的示例图中 (pygal.org/en/stable) 的 pygal 主页上更为明显。

标签: python svg pygal


【解决方案1】:

如 cmets 中所述,图形标题相对于图形而不是轴居中。这种行为在渲染函数中是硬编码的,没有配置选项可以改变它。

一种解决方法是创建您自己的类,该类继承自 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,但保留其余代码不变。您可能还想将类的名称更改为更有意义的名称。

【讨论】:

  • 对不起,我从来没有回复过这个!我以为我做到了,但完全忘记了。非常感谢你的帮助。这个解决方案非常简单,而且非常有意义。
【解决方案2】:

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

text-anchor 属性用于对齐(开始-,中间-或 end-alignment) 相对于给定点的一串文本。

您可以手动 change this value, .i.e. 到 finale svg 文件中的 end (在文本编辑器中打开文件并找到 .title )。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2015-11-29
    • 1970-01-01
    • 2016-09-21
    • 2013-11-27
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多