【发布时间】:2017-05-04 20:53:25
【问题描述】:
我想使用 JFreeChart 绘制一条在阈值以上改变其颜色的线。它应该看起来像这样,但没有平滑:https://www.amcharts.com/demos/smoothed-line-chart/。 这是我到目前为止得到的:
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);
}
}
这里有两个问题:
不知道如何获取当前项的值。
即使我得到了值,颜色也会应用于顶点,但我需要在线条越过阈值时立即改变颜色。
必须有某种方法来定义具有自己颜色的区域,但我找不到任何相关的东西。实现这一目标的最简单方法是什么? 如果这是不可能的,或者如果实现起来真的很复杂,如果线条保持颜色但高于阈值的背景颜色与低于阈值的背景颜色不同会更简单吗?
【问题讨论】:
标签: java charts jfreechart