Javaで棒グラフを作成するためにJFreeCharts
を使用しています。私の質問はかなり単純です...棒グラフのすべての棒にカスタムカラーを選択するにはどうすればよいですか? ?このカスタマイズがGradientPaint
で行われるかどうかはわかりません。棒の色を決定するコードの例は次のとおりです。
final GradientPaint gp0 = new GradientPaint(
0.0f, 0.0f, Color.blue,
0.0f, 0.0f, Color.blue
);
これがカスタムカラーを選ぶ正しい方法かどうかはわかりません。基本的に、GradientPaint
が正しい方法かどうかはわかりません。もしそうなら、誰かがこのコードを編集して青ではなくカスタムカラーにする方法を教えてもらえますか?
これが役立つかどうかはわかりませんが、カスタムカラーの情報は
これでチャートの色をカスタマイズする方法はありますか?
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でのチャートの実装は簡単で、見た目もずっと良くなります;)
_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);
_
これにより、すべてのバーがその特定の色に設定されます。行ごとに色を変更したい場合(たとえば、積み上げ棒グラフの場合)、データセットのタイプがCategoryDataset
のdataset.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;
}
}
_
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;
}
}
最も簡単な方法は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));