我正在使用 pygal 库来创建图表,并希望覆盖一些函数,例如 _tooltip_data 函数等。对于初学者,我试图覆盖 _title 函数(要创建文本,我意识到我可以这样做:gauge.title = "Blah Title",但我想覆盖 _title 函数中的一些其他内容)。
我很迷茫。为了创建 Gauge 图表,我创建了一个 Gauge 类,它继承自 MyGraph 类,MyGraph 类继承自 pypal 的 Graph 类。如果我尝试创建 MyGauge 图表,则会收到错误消息:
AttributeError: 'module' object has no attribute 'MyGauge'
这是我的代码,其中包含我确定的大量错误。请记住,我仍然是新手(我可能不必告诉您,您可能只需查看我的代码就可以猜到)。
import pygal, os
from pygal.graph.graph import Graph
from pygal.graph.gauge import Gauge
from pygal.graph import CHARTS_NAMES
class MyGraph(Graph):
def _title(self):
"""Make the title"""
if self.title:
for i, title_line in enumerate(self.title, 1):
self.svg.node(
self.nodes['graph'], 'text', class_='title',
x=self.margin.left + self.view.width / 2,
y=i * (self.title_font_size + 10)
).text = "Hey, this is my Chart Title" # my addition
class MyGauge(MyGraph):
pass
gauge_chart = pygal.MyGauge(human_readable=True,pretty_print=True) #@UndefinedVariable
gauge_chart.title = 'DeltaBlue V8 benchmark results'
gauge_chart.x_labels = ['Richards', 'DeltaBlue', 'Crypto', 'RayTrace', 'EarleyBoyer', 'RegExp', 'Splay', 'NavierStokes']
gauge_chart.range = [0, 10000]
gauge_chart.add('Chrome', 8212)
gauge_chart.add('Firefox', 8099)
gauge_chart.add('Opera', 2933)
gauge_chart.add('IE', 41)
png = 'gauge.png'
if os.path.isfile(png):
os.remove(png)
gauge_chart.render_to_png(png)
我被困住了。我什至尝试创建一个 MyPygal 类,它继承自 pygal,所以我可以覆盖 CHARTS_NAMES
class MyPygal(pygal):
def __init__(self):
CHARTS_NAMES = [
'Line',
'StackedLine',
'XY',
'Bar',
'HorizontalBar',
'StackedBar',
'HorizontalStackedBar',
'Pie',
'Radar',
'Funnel',
'Pyramid',
'VerticalPyramid',
'Dot',
'Gauge',
'MyGauge' # my new chart type
]
我用“MyPygal.MyGauge”调用它,但我得到了错误:
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
我什至走在正确的轨道上吗?