1
我想使用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);
}
}
兩個問題在這裏:
我不知道如何獲得當前項目的值。
即使我得到的值,顏色將適用於頂點,但我需要顏色改變,只要線越過閾值。
必須有某種方法來定義具有自己顏色的區域,但我找不到任何相關的東西。達到此目的最簡單的方法是什麼? 如果這不可行或者實現起來真的很複雜,如果線條保持其顏色,但閾值以上的背景顏色與低於閾值的背景顏色不同,會更簡單嗎?
謝謝trashgod。這兩個項目的工作,但如預期項目1改變了整個部分的顏色,這不完全是我想要的,但我想我會去與項目2 – corneliu
也參見'ValueMarker';或者,考慮根據需要調用「Graphics :: setClip」的自定義渲染器。 – trashgod