Center-align Pygal 图表中的标题
Center-align title in Pygal chart
我正在用 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')
默认你的标题有 属性 text-anchor:middle
:
text-anchor
attribute is used to align (start-, middle- or
end-alignment) a string of text relative to a given point.
您可以手动 change this value,即在结局 svg 文件中 end
(在文本编辑器中打开文件并找到 .title
)。
如评论中所述,图形标题相对于图形而不是轴居中。此行为在渲染函数中 hard-coded,没有配置选项可以改变它。
一个解决方法是创建您自己的 class 继承自 pygal.Line
和 over-rides 呈现标题(不是很大)的函数:
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
class 复制而来(Line
本身继承自 class)。唯一的变化是在注释 'Modified' 指示的行中,这是从呈现 x 轴标签的函数中获取的(因为它以轴为中心)。
有了这个,您可以用 chart = MyLineChart
替换 chart = pygal.Line
,但保留其余代码。您可能还想将 class 的名称更改为更有意义的名称。
我正在用 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')
默认你的标题有 属性 text-anchor:middle
:
text-anchor
attribute is used to align (start-, middle- or end-alignment) a string of text relative to a given point.
您可以手动 change this value,即在结局 svg 文件中 end
(在文本编辑器中打开文件并找到 .title
)。
如评论中所述,图形标题相对于图形而不是轴居中。此行为在渲染函数中 hard-coded,没有配置选项可以改变它。
一个解决方法是创建您自己的 class 继承自 pygal.Line
和 over-rides 呈现标题(不是很大)的函数:
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
class 复制而来(Line
本身继承自 class)。唯一的变化是在注释 'Modified' 指示的行中,这是从呈现 x 轴标签的函数中获取的(因为它以轴为中心)。
有了这个,您可以用 chart = MyLineChart
替换 chart = pygal.Line
,但保留其余代码。您可能还想将 class 的名称更改为更有意义的名称。