我正在用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')
答案 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
class(Line
本身继承的类)中复制的。唯一的更改是在注释为“已修改”的行中进行了更改,该更改来自呈现x轴标签的函数(因为该居中位于轴上)。
使用此方法,您可以将chart = pygal.Line
替换为chart = MyLineChart
,但其余代码保持不变。您可能还想将类的名称更改为更有意义的名称。