我想用JFreeChart实现如下图的效果
但是 我根据网上别人的代码 编写却总是包错 请高手帮帮忙。
我的代码如下public class bloodSugarChart extends ApplicationFrame {
//构造函数
public bloodSugarChart(String s) {
super(s);
setContentPane(createDemoLine());
}
//测试类
public static void main(String[] args) {
bloodSugarChart bloodSugar = new bloodSugarChart("血糖折线图");
bloodSugar.pack();
RefineryUtilities.centerFrameOnScreen(bloodSugar);
bloodSugar.setVisible(true); } // 生成显示图表的面板
public static JPanel createDemoLine() {
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
} // 生成图表主对象JFreeChart
public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
// 定义图表对象
JFreeChart chart = ChartFactory.createLineChart("病人半个月的血糖值显示图", // chart title
"采集时间", // domain axis label
"血糖指标值", // range axis label
linedataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
); // CategoryPlot plot = chart.getCategoryPlot(); //生成图形
XYPlot plot = (XYPlot) chart.getPlot();
//图像属性部分
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setDomainGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.GRAY);
//数据属性部分
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
rangeAxis.setUpperMargin(0.20);
rangeAxis.setLabelAngle(Math.PI / 2.0);
rangeAxis.setAutoRange(false);
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//设置曲线图与xy轴的距离
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
//设置曲线是否显示数据点
xylineandshaperenderer.setBaseShapesVisible(true);
//设置曲线显示各数据点的值
XYItemRenderer xyitem = plot.getRenderer();
xyitem.setBaseItemLabelsVisible(true);
xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
plot.setRenderer(xyitem);
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseShapesFilled(true);
return chart;
} // 生成数据
public static DefaultCategoryDataset createDataset() {
DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
// 各曲线名称
String series1 = "血糖值"; // 横轴名称(列名称)
String[] time = new String[15];
String[] timeValue = { "6-1日", "6-2日", "6-3日", "6-4日", "6-5日", "6-6日",
"6-7日", "6-8日", "6-9日", "6-10日", "6-11日", "6-12日", "6-13日",
"6-14日", "6-15日" };
for (int i = 0; i < 15; i++) {
time[i] = timeValue[i];
} for (int i = 0; i < 15; i++) {
Random r = new Random();
linedataset.addValue(i + i * 9.34 + r.nextLong() % 100, series1,
time[i]);
} return linedataset;
}}
但是 我根据网上别人的代码 编写却总是包错 请高手帮帮忙。
我的代码如下public class bloodSugarChart extends ApplicationFrame {
//构造函数
public bloodSugarChart(String s) {
super(s);
setContentPane(createDemoLine());
}
//测试类
public static void main(String[] args) {
bloodSugarChart bloodSugar = new bloodSugarChart("血糖折线图");
bloodSugar.pack();
RefineryUtilities.centerFrameOnScreen(bloodSugar);
bloodSugar.setVisible(true); } // 生成显示图表的面板
public static JPanel createDemoLine() {
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
} // 生成图表主对象JFreeChart
public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
// 定义图表对象
JFreeChart chart = ChartFactory.createLineChart("病人半个月的血糖值显示图", // chart title
"采集时间", // domain axis label
"血糖指标值", // range axis label
linedataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
); // CategoryPlot plot = chart.getCategoryPlot(); //生成图形
XYPlot plot = (XYPlot) chart.getPlot();
//图像属性部分
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setDomainGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.GRAY);
//数据属性部分
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
rangeAxis.setUpperMargin(0.20);
rangeAxis.setLabelAngle(Math.PI / 2.0);
rangeAxis.setAutoRange(false);
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//设置曲线图与xy轴的距离
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
//设置曲线是否显示数据点
xylineandshaperenderer.setBaseShapesVisible(true);
//设置曲线显示各数据点的值
XYItemRenderer xyitem = plot.getRenderer();
xyitem.setBaseItemLabelsVisible(true);
xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
plot.setRenderer(xyitem);
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseShapesFilled(true);
return chart;
} // 生成数据
public static DefaultCategoryDataset createDataset() {
DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
// 各曲线名称
String series1 = "血糖值"; // 横轴名称(列名称)
String[] time = new String[15];
String[] timeValue = { "6-1日", "6-2日", "6-3日", "6-4日", "6-5日", "6-6日",
"6-7日", "6-8日", "6-9日", "6-10日", "6-11日", "6-12日", "6-13日",
"6-14日", "6-15日" };
for (int i = 0; i < 15; i++) {
time[i] = timeValue[i];
} for (int i = 0; i < 15; i++) {
Random r = new Random();
linedataset.addValue(i + i * 9.34 + r.nextLong() % 100, series1,
time[i]);
} return linedataset;
}}
解决方案 »
- Cxf开发webservice时遇到Can't find the request for xx's Observer
- Java 分布式并发问题【100分】
- 数据保存,数据丢失,请高手指点!!
- CKeditor放到struts2里,不能上传图片
- EE SSH 加UPD/TCP服务?
- 【请教】tomcat日志目录中的stdout.log文件大小问题
- 新人求救myeclipse的struts spring hibernate mysql登陆界面问题
- 哥哥们 指教一下该不该去培训班啊
- 微博API 。。。。江湖救急!!!!
- Struts2属性get/set问题?急求高手解答、
- teleca ? NCS ?
- Double.valueOf($F{ORG_MONEY}.equals("")?"0.0":$F{ORG_MONEY})
at com.dy.lt.work.bloodSugarChart.createChart(bloodSugarChart.java:71)
at com.dy.lt.work.bloodSugarChart.createDemoLine(bloodSugarChart.java:53)
at com.dy.lt.work.bloodSugarChart.<init>(bloodSugarChart.java:40)
at com.dy.lt.work.bloodSugarChart.main(bloodSugarChart.java:44)
主要就是下面这段代码啦 XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//设置曲线图与xy轴的距离
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
//设置曲线是否显示数据点
xylineandshaperenderer.setBaseShapesVisible(true);
//设置曲线显示各数据点的值
XYItemRenderer xyitem = plot.getRenderer();
xyitem.setBaseItemLabelsVisible(true);
xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
plot.setRenderer(xyitem);
XYPlot plot = (XYPlot) chart.getPlot();
org.jfree.chart.plot.CategoryPlot cannot be cast to org.jfree.chart.plot.XYPlot
类型转化错误啊
CategoryPlot plot = chart.getCategoryPlot();
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//设置曲线图与xy轴的距离
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
//设置曲线是否显示数据点
xylineandshaperenderer.setBaseShapesVisible(true);
//设置曲线显示各数据点的值
XYItemRenderer xyitem = plot.getRenderer();
xyitem.setBaseItemLabelsVisible(true);
xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
plot.setRenderer(xyitem);
这段代码对应的必须是 XYPlot
LineAndShapeRenderer不行吗?
则创建chart要用ChartFactory.createXYLineChart(title, xAxisLabel, yAxisLabel, dataset, orientation, legend, tooltips, urls);
用的是CategoryPlot
那些关键语句部分如下
// 数据渲染部分
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseShapesFilled(true);
renderer.setBaseItemLabelsVisible(true);
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer
.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelFont(new Font("Dialog", 1, 14));
plot.setRenderer(renderer);贴出来分享下。
最后谢谢给我帮助的人。。