web-dev-qa-db-ja.com

JFreeChart棒グラフカスタムカラー?

Javaで棒グラフを作成するためにJFreeChartsを使用しています。私の質問はかなり単純です...棒グラフのすべての棒にカスタムカラーを選択するにはどうすればよいですか? ?このカスタマイズがGradientPaintで行われるかどうかはわかりません。棒の色を決定するコードの例は次のとおりです。

   final GradientPaint gp0 = new GradientPaint(
                    0.0f, 0.0f, Color.blue, 
                    0.0f, 0.0f, Color.blue
                );

これがカスタムカラーを選ぶ正しい方法かどうかはわかりません。基本的に、GradientPaintが正しい方法かどうかはわかりません。もしそうなら、誰かがこのコードを編集して青ではなくカスタムカラーにする方法を教えてもらえますか?

これが役立つかどうかはわかりませんが、カスタムカラーの情報は

  • 色相:142
  • 土:109
  • ラム:126
  • 赤:79
  • 緑:129
  • 青:189

これでチャートの色をカスタマイズする方法はありますか?

11
user3794422

Jfreechart.Budでコーディングしてからしばらく経ちましたが、これはバーのペイントを変更するために書いたコードでした;)。

    CategoryPlot cplot = (CategoryPlot)chart.getPlot();
    cplot.setBackgroundPaint(SystemColor.inactiveCaption);//change background color

    //set  bar chart color

    ((BarRenderer)cplot.getRenderer()).setBarPainter(new StandardBarPainter());

    BarRenderer r = (BarRenderer)chart.getCategoryPlot().getRenderer();
    r.setSeriesPaint(0, Color.blue);

これまでに作成した最初のアプリケーションのコードを見ていますが、今は機能するかどうかわかりません。

将来的には、グーグルアウトまたは購入することをお勧めしますPDF jfreechartのガイド。そこにすべてのリファレンスとサンプルがあります。しかし、可能であれば、JavaFXにスキップすることを強くお勧めします。jfreechartでの作業は苦痛です。正直に言うと、javafxでのチャートの実装は簡単で、見た目もずっと良くなります;)

15
Tomas Bisciak
_CategoryPlot plot = chart.getCategoryPlot();
BarRenderer renderer = (BarRenderer) plot.getRenderer();

// set the color (r,g,b) or (r,g,b,a)
Color color = new Color(79, 129, 189);
renderer.setSeriesPaint(0, color);
_

これにより、すべてのバーがその特定の色に設定されます。行ごとに色を変更したい場合(たとえば、積み上げ棒グラフの場合)、データセットのタイプがCategoryDatasetdataset.getRowCount()を呼び出して、番号を返すことができます。棒グラフの各列に含まれる行の数。次に、行のインデックスに基づいて、renderer.setSeriesPaint()呼び出しでシリーズにインデックスを付けることができます。

_for (int i = 0; i < dataset.getRowCount(); i++){
    switch (i) {
    case 0:
        // red
        color = new Color(255, 0, 0);
        break;
    case 1:
        // blue
        color = new Color(0, 0, 255);
        break;
    default:
        // green
        color = new Color(0, 255, 0);
        break;
    }
}
_
4
bradykey

JfreeChartを使用した棒グラフのカスタムカラー

CategoryItemRenderer barColor = new CustomRenderer(new Paint[]{});
plot.setRenderer(barColor);

新しいクラス名を作成するのはCustomRenderer extends BarRenderer3DまたはBarRendererを選択します

class CustomRenderer extends BarRenderer3D {

    private Paint[] colors;
    public CustomRenderer(final Paint[] colors) {
        this.colors = colors;
    }

    public Paint getItemPaint(final int row, final int column) {
        if(column==0)
            return Color.blue;
        else if(column==1)
            return Color.CYAN;
        else  
            return Color.RED;
   }
}
1
Chetan Bhagat

最も簡単な方法はgetRenderer().setSeriesPaint(index, color)メソッドを使用することだと思います。

したがって、例として、3つの棒がグループ化された棒グラフに対して以下のコードを試すことができます。

JFreeChart barChart = ChartFactory.createBarChart(
                "Bar Chart Titke",
                "Category", "Score",
                dataset,PlotOrientation.HORIZONTAL,
                true, true, false);

        CategoryPlot plot = barChart.getCategoryPlot();
        plot.getRenderer().setSeriesPaint(0, new Color(128, 0, 0));
        plot.getRenderer().setSeriesPaint(1, new Color(0, 0, 255));
        plot.getRenderer().setSeriesPaint(2, new Color(0, 230, 255));
0
Osanda Deshan