1

私は pygal ライブラリを使用してグラフを作成しており、_tooltip_data 関数などのいくつかの関数をオーバーライドしたいと考えています。手始めに、_title 関数をオーバーライドしようとしています (テキストを作成するには、gauge.title = "Blah Title" を実行できることに気付きましたが、_title 関数で他のものをオーバーライドしたいと思います)。

私はかなり迷っています。Gauge チャートを作成するには、pypal の Graph クラスから継承する MyGraph クラスから継承する Gauge クラスを作成します。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)

私は立ち往生しています。pygal から継承する MyPygal クラスを作成しようとさえしたので、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)

私は正しい軌道に乗っていますか?

4

1 に答える 1

1

独自のファイルに独自のクラスを作成する場合は、 でそれを参照しようとしないでくださいpygal.MyGauge。プレフィックスを使用すると、ライブラリpygal.内のものを参照できます。pygalしかし、あなたのMyGaugeクラスはそのライブラリの一部ではありません。あなたはそれを自分で作成しました。でクラスをインスタンス化するだけMyGauge(...)です。

また、なぜMyGaugeクラスを作成したのですか?それは何もしません。MyGraph直接インスタンス化しないのはなぜですか?

于 2013-02-25T02:34:23.893 に答える