JFreeChartを使用して、色をしきい値より上に変更する線を描きたいと思います。これは次のようになりますが、平滑化されません。https://www.amcharts.com/demos/smoothed-line-chart/。 これは私がこれまでに得たものである:ここjfreechartでしきい値を超える線の色を変更する
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Paint;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;
public class Charty extends ApplicationFrame {
public Charty(String applicationTitle, String chartTitle) {
super(applicationTitle);
JFreeChart lineChart = ChartFactory.createXYLineChart(chartTitle, "Years",
"Number of Schools", createDataset(), PlotOrientation.VERTICAL,
true, true, false);
XYPlot plot = lineChart.getXYPlot();
XYItemRenderer renderer = new StandardXYItemRenderer() {
@Override
public Paint getItemPaint(int series, int item) {
int value = 0;
// how do I get the value of the current point?
return value > 50 ? Color.red : Color.yellow;
}
};
plot.setRenderer(renderer);
ChartPanel chartPanel = new ChartPanel(lineChart);
chartPanel.setPreferredSize(new Dimension(560, 367));
setContentPane(chartPanel);
}
private XYDataset createDataset() {
int nPoints = 200;
final double[][] data = new double[2][nPoints];
for (int i = 0, j = 0; i < nPoints; i++, j++) {
data[0][j] = i;
data[1][j] = Math.random() * 10;
}
DefaultXYDataset dataset = new DefaultXYDataset();
dataset.addSeries("points", data);
return dataset;
}
public static void main(String[] args) {
Charty chart = new Charty("School Vs Years", "Numer of Schools vs years");
chart.pack();
RefineryUtilities.centerFrameOnScreen(chart);
chart.setVisible(true);
}
}
2つの問題:
私は現在の項目の値を取得する方法がわかりません。
値を取得しても、色は頂点に適用されますが、線がしきい値を超えるとすぐに色を変更する必要があります。
独自の色を持つ領域を定義するには何らかの方法が必要ですが、関連するものは見つかりません。これを達成する最も簡単な方法は何ですか? これが不可能な場合や、実際に実装するのが複雑な場合は、線が色を維持しても、しきい値を超える背景色がしきい値を下回る背景色と異なる場合、より簡単になりますか?
あなたはtrashgodありがとうございます。両方の項目は機能しますが、期待した項目1がセグメント全体の色を変更します。これは正確には私が望むものではありませんが、項目2を参照してください。 – corneliu
参照 'ValueMarker';代わりに、必要に応じて 'Graphics :: setClip'を呼び出すカスタムレンダラーを考えてみてください。 – trashgod