Java JfreeChart 问题请教
我想做一个折线图,下面这个例子可以实现当鼠标放到节点上时,显示节点的值,我想实现当鼠标移动到节点中间的任意位置时,也能计算出当前
点垂直线与折线相交的值,哪位做过?共享一下或者发给我:hyrongg@gmail.com
谢谢!
package charttest;
import java.awt.Color;
import java.awt.geom.Rectangle2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
/**
* @author <a href="mailto:wanghb@sinotec.com.cn">wanghb</a>
* @version 1.0
*/
public class LineChart1{
public LineChart1() {
}
public static void main(String[] args){
// 各曲线名称
String series1 = "Type1";
String series2 = "Type2";
String series3 = "type3";
// 横轴名称(列名称)
String type1 = "Jan";
String type2 = "Feb";
String type3 = "Mar";
String type4 = "Apr";
String type5 = "May";
String type6 = "June";
String type7 = "Jul";
String type8 = "Aug";
// 建立dataset
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 以下可以动态添加数据
dataset.addValue(1.3, series1, type1);
dataset.addValue(4.2, series1, type2);
dataset.addValue(3.9, series1, type3);
dataset.addValue(5.5, series1, type4);
dataset.addValue(5.3, series1, type5);
dataset.addValue(7.1, series1, type6);
dataset.addValue(7.9, series1, type7);
dataset.addValue(9.0, series1, type8);
dataset.addValue(5.3, series2, type1);
dataset.addValue(7.1, series2, type2);
dataset.addValue(6.6, series2, type3);
dataset.addValue(8.0, series2, type4);
dataset.addValue(4.8, series2, type5);
dataset.addValue(4.5, series2, type6);
dataset.addValue(3.7, series2, type7);
dataset.addValue(4.2, series2, type8);
dataset.addValue(4.3, series3, type1);
dataset.addValue(6.4, series3, type2);
dataset.addValue(3.5, series3, type3);
dataset.addValue(4.0, series3, type4);
dataset.addValue(3.6, series3, type5);
dataset.addValue(3.9, series3, type6);
dataset.addValue(2.5, series3, type7);
dataset.addValue(3.1, series3, type8);
dataset.addValue(4.0, "Alert", type4);
dataset.addValue(6.4, "Alert", type2);
dataset.addValue(4.3, "Alert2", type1);
// 建立chart
JFreeChart chart = ChartFactory.createLineChart(
"2005 Data Chart", // chart title
"Date", // domain axis label
"Value(million)", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
CategoryPlot plot = chart.getCategoryPlot();
// customise the range axis...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
rangeAxis.setUpperMargin(0.20);
rangeAxis.setLabelAngle(Math.PI / 2.0);
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
// renderer.setBaseShape(new Rectangle2D.Double(-1.5, -1.5, 3, 3), true); //设置点
renderer.setShape(new Rectangle2D.Double(-1.5, -1.5, 3, 3));
renderer.setShapesVisible(true);
renderer.setSeriesPaint(3,Color.red);
renderer.setSeriesLinesVisible(3,false);
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());//显示折点数据
renderer.setItemLabelsVisible(true);
ChartFrame pieFrame = new ChartFrame("折线图预警图",chart);
pieFrame.pack();
pieFrame.setVisible(true);
}
}