1

ラファエル円グラフに問題があります。私が使用しているデータは動的であり、場合によっては 1 つの値のみが返されます。これは、唯一のスライスであるため、グラフ全体が塗りつぶされていることを意味します。問題は、値が 1 つしかない場合、色の指定が無視されることです。

例: 以下は、2 つの値を持つラファエル円グラフの作成です。各スライスには、「色」セクションで指定された適切な色があります。

var r = Raphael("holder");  
r.piechart(160, 136, 120, [100,200],{colors: ["#000","#cecece"]});

これは問題なく動作し、2 つの適切なサイズのスライス (1 つは黒、もう 1 つは灰色) が得られます。

ただし、以下の例では、色の設定に関係なく、常に青で塗りつぶされた 1 つの完全なパイが作成されます。

var r = Raphael("holder");  
r.piechart(160, 136, 120, [100],{colors: ["#000"]});

この状況では、「色」で設定されているため、パイ全体を黒くする必要があります

私は何か間違ったことをしていますか、それともこれはバグですか?

4

3 に答える 3

2

INMO パイのスライスが 1 つしかない場合のバグの原因は、その色がハードコードされていることです...

これが私がそれを解決した方法です(私がしたのは、colors存在する場合は引数を使用することだけです...)

g.pie.jsの 47 行目の後にこれを追加します

var my_color =  chartinst.colors[0];
if(opts.colors !== undefined){
    my_color =  opts.colors[0];
}

次に、次の行 (元の js ファイルの 48 行目)

series.push(paper.circle(cx, cy, r).attr({ fill: chartinst.colors[0]....

に置き換えchartinst.colors[0]ますmy_color

それでおしまい

   if (len == 1) {
        var my_color =  chartinst.colors[0];
        if(opts.colors !== undefined){
            my_color =  opts.colors[0];
        }
        series.push(paper.circle(cx, cy, r).attr({ fill: my_color,   ....
于 2012-06-12T19:24:11.453 に答える
0

この質問はすでに1日前なので、おそらく自分でこれを理解したでしょう...しかし、1の特別なケースのデータセットを使用して無限小の秒の値を追加することにより、Raphaelを「だまして」黒いユニットをレンダリングすることができます。したがって、データポイントを含む配列データが与えられた場合...

if ( data.length == 1 )
    data.push( 0.000001 );

canvas.piechart(250, 250, 120, data, {colors: ["#000", "#CECECE", "#F88" /*, ... */ ] });

小さなスライバーは 180 度の位置で 1 ピクセルの線としてレンダリングされますが、カラー パレットをいじってごまかすことができます。

はい、それはトリックです。私は、gRaphael の動作が実装が不十分であるほどバグが多いとは思いません (単一要素のデータセットは、他のすべての場合と同様にパスではなく円を生成するため、明らかに特殊なケースです)。

于 2012-06-04T17:51:33.177 に答える