最近一直在做Jfreechart的问题,今天终于有点进展,可以松一口气了。最主要的原因是数据集的生成没有做好。导致图形的失败。Jfreechart的图形类还是很强大的。这次引用了jfreechart developer guide source code,也请了其他的人帮忙。谢谢大家了。这里把堆积图和混合图的生成方法贴出来。供以后参考。
public CategoryDataset createStackedBarDateSet(String strTtimePointZone,
String[][] arr) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();// 定义一个柱图的数据集合。
int rowindex = arr[0].length;
int columindex = arr.length;
String ty = "";
String tm = "";
String[] rowKeys = new String[rowindex-1];//定义每个柱子,指标名称
for (int i = 1; i < rowindex; i++) {
rowKeys[i - 1] = arr[0][i];//指标名称
}
String[] columnKeys = new String[columindex-3];//定义统计时间
double[][] data = new double[rowindex-1][columindex-3];
for (int j = 3; j < columindex; j++) {
for (int i = 1; i < rowindex; i++) {
ty = arr[j][0].substring(2, 4);
tm = arr[j][0].substring(4, 6);
columnKeys[j-3] = ty + "/" + tm;//指标时间
if (!arr[j][i].equals("--")) {
data[i - 1][j-3] = Double.parseDouble(arr[j][i]);
}
}
}
for(int n=0;n<data.length;n++){
for(int m = 0;m<data[0].length;m++){
dataset.addValue(data[n][m], rowKeys[n], columnKeys[m]);
}
}
return dataset;
}
图形生成方法:
public String getStackedBarChart(HttpSession session,
String strTtimePointZone, String[][] arr, PrintWriter pw) {
// 1:得到 CategoryDataset
// 2:JFreeChart对象
CategoryDataset dataset = this.createStackedBarDateSet(
strTtimePointZone, arr);// 数据集
JFreeChart chart = ChartFactory.createStackedBarChart("堆积柱图", // 图表标题
"时间", // x-axis label
"值", // y-axis label
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
// 设置JFreeChart的显示属性,对图形外部部分进行调整
chart.setBackgroundPaint(Color.white);// 设置图背景色
TextTitle title = new TextTitle("指标堆积图", font);// 设置字体大小,形状
chart.setTitle(title);
// 图例字体清晰
chart.setTextAntiAlias(true);
CategoryPlot plot = chart.getCategoryPlot();//画布属性
plot.setNoDataMessage("NO Data!");
plot.setRangeGridlinesVisible(true);// 设置横虚线可见
plot.setRangeGridlinePaint(Color.gray);// 虚线色彩
plot.setBackgroundPaint(Color.WHITE);// 设置网格背景色
plot.setDomainGridlinePaint(Color.DARK_GRAY);// 设置网格Y(Domain轴)颜色
plot.setRangeGridlinePaint(Color.DARK_GRAY);// 设置网格X横线颜色
plot.setRangeGridlineStroke(new BasicStroke(0.2f)); // 数据X轴网格线条笔触
plot.setDomainGridlineStroke(new BasicStroke(0.1f)); // 数据Y轴网格线条笔触
plot.setAxisOffset(new RectangleInsets(1.0, 1.0, 1.0, 1.0));// 设置曲线图与xy轴的距离
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
NumberAxis vn = (NumberAxis) plot.getRangeAxis();// 数据轴精度
vn.setAutoRangeIncludesZero(true);// 设置数据轴坐标从0开始
vn.setLabelFont(fontAxis);// 轴标题
DecimalFormat df = new DecimalFormat("");// 数据显示格式是百分比
vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
// DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(fontAxis);// 轴标题
domainAxis.setTickLabelFont(fontAxis);// 轴数值
domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示
// domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 7.0));
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90);//X轴显示位置为90度
plot.setDomainAxis(domainAxis);
ValueAxis rangeAxis = plot.getRangeAxis();// y轴设置
rangeAxis.setLabelFont(fontText);
rangeAxis.setTickLabelFont(fontText);
rangeAxis.setUpperMargin(0.15);// 设置最高的一个 Item 与图片顶端的距离
rangeAxis.setLowerMargin(0.15);// 设置最低的一个 Item 与图片底端的距离
plot.setRangeAxis(rangeAxis);
// Renderer 对象是图形的绘制单元
// StackedBarRenderer renderer = (StackedBarRenderer) plot.getRenderer();
StackedBarRenderer3D renderer = new StackedBarRenderer3D();//just test
renderer.setItemLabelFont(fontText);
renderer.setMaximumBarWidth(0.05);// 设置柱子宽度
renderer.setMinimumBarLength(0.1);// 设置柱子高度
renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的边框颜色
renderer.setDrawBarOutline(true);// 设置柱的边框可见
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemMargin(0.05);// 设置每个地区所包含的平行柱的之间距离
plot.setRenderer(renderer);
// 取得统计图表的第一个图例
LegendTitle legend = chart.getLegend(0);
//设置图例的字体
legend.setItemFont(fontText);
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
try {
fileName = ServletUtilities.saveChartAsPNG(chart, 720, 540, info,
session);// 生成图片,放到服务器的临时文件夹下
// Write the image map to the PrintWriter
ChartUtilities.writeImageMap(pw, fileName, info, false);
} catch (IOException e) {
e.printStackTrace();
}
pw.flush();
return fileName;
}
public String getBarChart(HttpSession session, String strTimePointZone,
String[][] arr, PrintWriter pw) {
CategoryDataset categorydataset1 = this.createBarDataSet(strTimePointZone, arr);//柱线数据集
CategoryDataset categorydataset = this.createBarDataSet(strTimePointZone, arr);//折线数据集(相同方法)
JFreeChart chart = ChartFactory.createBarChart("指标混合图",
"时间",
"值",
categorydataset1,
PlotOrientation.VERTICAL,
true,
false,
false);
chart.setBackgroundPaint(Color.white);// 设置曲线图背景色
TextTitle title = new TextTitle("指标混合图", font);// 设置字体大小,形状
chart.setTitle(title);
chart.setTextAntiAlias(true);
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
categoryplot.setNoDataMessage("NO Data!");
categoryplot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//映射折线数据集
categoryplot.setDataset(1, categorydataset);
categoryplot.mapDatasetToRangeAxis(1, 1);
categoryplot.setBackgroundPaint(Color.white);
categoryplot.setRangeGridlinesVisible(true);// 设置横虚线可见
categoryplot.setRangeGridlinePaint(Color.gray);// 虚线色彩
categoryplot.setDomainGridlinePaint(Color.DARK_GRAY);// 设置网格Y(Domain轴)颜色
categoryplot.setRangeGridlinePaint(Color.DARK_GRAY);// 设置网格X横线颜色
categoryplot.setRangeGridlineStroke(new BasicStroke(0.2f)); // 数据X轴网格线条笔触
categoryplot.setDomainGridlineStroke(new BasicStroke(0.1f)); // 数据Y轴网格线条笔触
categoryplot.setAxisOffset(new RectangleInsets(1.0, 1.0, 1.0, 1.0));// 设置图与xy轴的距离
categoryplot.setDomainCrosshairVisible(true);
categoryplot.setRangeCrosshairVisible(true);
CategoryAxis categoryaxis = categoryplot.getDomainAxis();//X轴
categoryaxis.setLabelFont(fontText);
categoryaxis.setTickLabelFont(fontText);
// categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 7.0));
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90);//X轴显示位置为90度
NumberAxis left = new NumberAxis("值");//Y轴
NumberAxis numberaxis = new NumberAxis("比率");//Y轴
numberaxis.setLabelFont(fontText);
left.setLabelFont(fontText);
categoryplot.setRangeAxis(0, left);//左侧Y轴
categoryplot.setRangeAxis(1, numberaxis);//右侧Y轴
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseOutlinePaint(Color.BLACK);
// 设置每个地区所包含的平行柱之间的距离renderer.setItemMargin(0.1);
renderer.setMaximumBarWidth(0.05);// 设置柱子宽度
renderer.setMinimumBarLength(0.1);// 设置柱子高度
renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的边框颜色
renderer.setDrawBarOutline(true);// 设置柱的边框可见
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemMargin(0.05);
LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();//折线对象
lineandshaperenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
lineandshaperenderer.setSeriesPaint(0, new Color(0, 0, 255));
categoryplot.setRenderer(0,renderer);
categoryplot.setRenderer(1, lineandshaperenderer);
categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
//图例各个属性
LegendTitle legendtitle = chart.getLegend(0);
legendtitle.setMargin(new RectangleInsets(2D, 2D, 2D, 2D));
legendtitle.setBorder(new BlockBorder());
legendtitle.setItemFont(fontText);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
try {
fileName = ServletUtilities.saveChartAsPNG(chart, 720, 540, info,
session);// 生成图片
ChartUtilities.writeImageMap(pw, fileName, info, false);
} catch (IOException e) {
e.printStackTrace();
}
pw.flush();
return fileName;// 返回生成图片的文件名
}
贴图:
分享到:
相关推荐
在本示例中,我们将使用JFreeChart生成图表,然后将生成的图表嵌入到Freemarker模板生成的Word文档中。 生成图表的过程如下: 1. 创建`CategoryDataset`或`PieDataset`对象,填充必要的数据。 2. 使用这些数据集...
在“JFreeChart混合图表”这个示例中,可能包含了创建这样一个混合图表的完整代码和结果图像。解压缩文件后,通过阅读和运行代码,你可以看到如何实际操作这些步骤,并理解如何根据自己的需求调整图表的各种特性。 ...
在Java Web开发中,JFreeChart是一个非常强大的库,它允许开发者创建各种复杂的图表,包括折线图、柱状图、饼图、散点图等,适用于数据分析和展示。这篇博客文章“在Java Web中使用JFreechart创建图表信息(主要用于...
在"JFreeChart示例"中,我们将会深入探讨如何利用 JFreeChart 创建这些图表,并以Web方式展示它们。 首先,JFreeChart 的核心在于它的灵活性和易用性。开发者可以通过简单的 API 调用来构建复杂的图表,调整颜色、...
JFrame frame = new JFrame("图表示例"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(chartPanel); frame.pack(); frame.setVisible(true); ``` 导出为图像文件,则可以使用`ChartUtilities`...
JFreeChart是一款强大的开源Java图表库,用于在Java应用程序中创建各种统计图表。它支持多种类型的图表,如条形图、线图、饼图、散点图等,并且具有丰富的自定义选项。本文将通过示例代码,详细介绍如何使用...
NULL 博文链接:https://xdoc.iteye.com/blog/1468003
这个示例资源提供了JFreeChart的实践应用,帮助开发者了解如何在Java程序中创建和展示各种图表。 在运行JfreeChart示例之前,我们需要准备以下依赖库: 1. **jcommon-1.0.9.jar**:这是JFreeChart的一个基础库,...
在JavaFX中,JFreeChart是一个非常有用的库,它允许开发者创建各种复杂的图表,如折线图、柱状图、饼图、散点图等。本文将深入探讨如何结合JavaFX与JFreeChart来实现图表的生成。 首先,我们需要了解JFreeChart库的...
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、 散点图...
这些示例展示了如何创建和定制各种图表,是学习和理解JFreeChart的绝佳资源。例如,`DemoCharts.java`包含了各种图表的基本用法,而`ChartCustomization.java`展示了如何自定义图表的样式。 ### 6. **应用场景** ...
### 用JFreeChart创建基于Web的图表 #### 一、引言与背景 随着互联网技术的迅速发展,网络应用程序已经不再局限于简单的静态内容或基本的动态内容展示。特别是随着Web 2.0时代的到来,用户对交互性和个性化的需求...
JFreeChart 是一个广泛使用的 Java 图形库,它允许开发者创建各种高质量的图表,包括折线图、柱状图、饼图、散点图等。在Java应用中,尤其是在数据可视化方面,JFreeChart 提供了丰富的功能和自定义选项。本篇将深入...
"FileRecv\JfreeChartDemo图表列子java" 这个标题指出,我们关注的是一个关于Java编程的示例项目,具体来说是利用JFreeChart库创建图表的实例。JFreeChart是一个强大的Java库,用于生成高质量的2D图表,包括线图、...
本工程例子展示了如何利用JFreeChart创建包含中文内容的图表,并解决中文乱码问题以及饼图中显示百分比的问题。 ### 一、中文乱码处理 在Java程序中,处理中文字符时常常会遇到乱码问题。这通常是由于字符编码设置...
JFreeChart是一款强大的Java库,用于创建各种类型的高质量图表,如饼图、柱状图、时间序列图等。这个例子的压缩包“JFreeChart生成图表的例子.rar”包含了一些示例代码,帮助开发者理解如何利用JFreeChart在Java应用...
标题中的“jfreechart图表工程,可以导入测试”表明这是一个包含 JFreeChart 实例代码和测试的项目,可以帮助开发者了解如何在自己的项目中集成和使用 JFreeChart。 **1. JFreeChart 的基本概念** JFreeChart 支持...
创建图表的基本步骤包括创建一个`JFreeChart`对象,指定图表的类型,如柱状图(`BarChart`)、饼图(`PieChart`)等。然后,需要定义数据源,如`CategoryDataset`或`PieDataset`,并将数据源与图表关联。最后,可以...
这个"jfreechart图表demo"是基于 JFreeChart 的示例项目,包含了如何在实际应用中集成和使用 JFreeChart 的具体代码实例,同时提供了 Maven 依赖,方便在现代 Java 开发环境中进行构建和管理。 **1. JFreeChart ...
在本篇文章中,我们将深入探讨如何使用JFreeChart这一强大的Java图表库来创建基于Web的图表。通过细致地解析标题、描述以及部分已给出的内容,本文将为读者提供全面而深入的理解,帮助开发者掌握利用JFreeChart进行...