于jfreechart 画拆线图时存在空数据的问题请教大家

werwhyuy 2008-07-14 09:33:14
平时jfree画图,数据一般都是全的。这个实例中有一个数据为NUll
这样一来,拆线中间缺了一个口子,很不美观(如附件中的缺口图)。
请教大家,代码应该怎样改才能得到如附件中效果,把缺口部分用虚线连接,然后标明为缺口。

这样的问题相信用过JFreeChart 朋友都碰到过。
还有些比如:怎样标记出拆线图中的最高,最低点及均值点等一些特殊位置?
请大家积极讨论,谢谢啦!

//========代码开始======================================================
import java.awt.Color;
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.axis.NumberTickUnit;
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.Range;
import org.jfree.data.category.DefaultCategoryDataset;

/**
* JfreeChart 单线图
* @author Administrator
*
* @date:2008-07-07
*
*/
public class LineChartTest {
/**
* 获取简单数据集对象
* @return dataset
*/
public DefaultCategoryDataset getJdDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "猪肉", "一月");
dataset.addValue(200, "猪肉", "二月");
dataset.addValue(800, "猪肉", "三月");
dataset.addValue(null, "猪肉", "四月");
dataset.addValue(600, "猪肉", "五月");
dataset.addValue(900, "猪肉", "六月");
return dataset;
}

/**
* 创建图表主对象JFreechart,并设置图像显示
* @return JFreeChart
*/
public JFreeChart createLineChart() {
DefaultCategoryDataset dataset = getJdDataSet();
JFreeChart chart = ChartFactory.createLineChart("XX省上半年肉类销量统计图", "XX省",
"销量", dataset, PlotOrientation.VERTICAL, true, true, false);
// 数据区设置
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.white); // 数据区背景色

NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 是否显示零点
rangeAxis.setAutoRangeIncludesZero(false);
// 数据轴上(右)边距
rangeAxis.setUpperMargin(0.02);
// Y轴名称的倾斜角度
rangeAxis.setLabelAngle(0.3);
// 设置数据轴的数据范围
rangeAxis.setRange(new Range(0, 1000));
// 设置刻度波动值(步长)
rangeAxis.setTickUnit(new NumberTickUnit(102));

// 拆线线设置
// 显示数据
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
// 设置曲线样式
renderer.setPaint(Color.GREEN);
renderer.setItemLabelsVisible(true);
renderer.setShapesVisible(true);
return chart;
}

public static void main(String ...Strings) {
LineChartTest p = new LineChartTest();
JFreeChart chart = p.createLineChart();
ChartFrame frame = new ChartFrame("XX省上半年肉类销量统计图", chart);
frame.pack();
frame.setVisible(true);
System.out.println("ok");
}
}
//==============end===================================================
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun_zhicheng 2008-07-16
  • 打赏
  • 举报
回复
楼主 我现在学习这个jfreechar 你有没有现成的代码发给我吗? 让我也学习学习!!! QQ 365328730
谢谢了!!!

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧