import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.geom.Ellipse2D;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LayeredBarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
public class ChartsMixed {
private static final long serialVersionUID = 1L;
public void createMixedCharts(double[][] data_sucRate,
String[] rowKeys_sucRate, String[] columnKeys_sucRate,
double[][] data_useCase, String[] rowKeys_useCase,
String[] columnKeys_useCase, String picName) {
if (data_sucRate == null || rowKeys_sucRate == null
|| columnKeys_sucRate == null || data_useCase == null
|| rowKeys_useCase == null || columnKeys_useCase == null
|| picName == null || "".equals(picName.trim())) {
return;
}
CategoryDataset dataSetColumn = createDataset(data_useCase,
rowKeys_useCase, columnKeys_useCase);
CategoryDataset dataSetLine = createDataset(data_sucRate,
rowKeys_sucRate, columnKeys_sucRate);
createChart(dataSetColumn, dataSetLine, picName);
}
@SuppressWarnings("deprecation")
private void createChart(CategoryDataset dataSetColumn,
CategoryDataset dataSetLine, String picName) {
setChartTheme();
Font font = new Font("宋体", Font.BOLD, 12);
// 创建图形对象
JFreeChart jfreeChart = ChartFactory.createBarChart("", // 图表标题
"", // 目录轴的显示标签
"",// 数值轴的显示标签
dataSetColumn, // 数据集
PlotOrientation.VERTICAL,// 图表方向:水平、垂直
false, // 是否显示图例(对于简单的柱状图必须是false)
true,// 是否生成工具
false);// 是否生成URL链接
jfreeChart.getTitle().setFont(font);
// 图表的背景色(默认为白色)
jfreeChart.setBackgroundPaint(Color.white);
// 设置图片背景色
GradientPaint gradientPaint = new GradientPaint(0, 1000, Color.WHITE,
0, 0, Color.WHITE, false);
jfreeChart.setBackgroundPaint(gradientPaint);
CategoryPlot categoryPlot = (CategoryPlot) jfreeChart.getPlot();
// 设置图形的背景色
categoryPlot.setBackgroundPaint(Color.WHITE);
// 设置图形上竖线是否显示
categoryPlot.setDomainGridlinesVisible(false);
// 设置图形上竖线的颜色
categoryPlot.setDomainGridlinePaint(Color.GRAY);
// 设置图形上横线的颜色
categoryPlot.setRangeGridlinePaint(Color.GRAY);
// 设置柱状图的Y轴显示样式
setNumberAxisToColumn(categoryPlot);
CategoryAxis categoryaxis = categoryPlot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);// 横轴斜45度
// 设置折线图的Y轴显示样式
setNumberAxisLine(categoryPlot);
categoryPlot.setDataset(1, dataSetLine);// 设置数据集索引
categoryPlot.mapDatasetToRangeAxis(1, 1);// 将该索引映射到axis
// 第一个参数指数据集的索引,第二个参数为坐标轴的索引
LineAndShapeRenderer lineAndShapeRenderer = new LineAndShapeRenderer();
// 数据点被填充即不是空心点
lineAndShapeRenderer.setShapesFilled(true);
// 数据点间连线可见
lineAndShapeRenderer.setLinesVisible(true);
// 设置折线拐点的形状,圆形
lineAndShapeRenderer.setSeriesShape(0, new Ellipse2D.Double(-2D, -2D,
4D, 4D));
// 设置某坐标轴索引上数据集的显示样式
categoryPlot.setRenderer(1, lineAndShapeRenderer);
// 设置两个图的前后顺序
// ,DatasetRenderingOrder.FORWARD表示后面的图在前者上面,DatasetRenderingOrder.REVERSE表示
// 表示后面的图在前者后面
categoryPlot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
createPicture(picName, jfreeChart);
}
/**
* 设置折线图的Y轴显示样式
*
* @param categoryplot
* @return
*/
private CategoryPlot setNumberAxisLine(CategoryPlot categoryplot) {
ValueAxis numberaxis = new NumberAxis("");
numberaxis.setUpperBound(100.00D); // 纵轴上限
numberaxis.setLowerBound(0.00D); // 纵轴下限
categoryplot.setRangeAxis(1, numberaxis);
return categoryplot;
}
/**
* 设置柱状图的Y轴显示样式,NumberAxis为整数格式
*
* @param categoryplot
* @return
*/
private CategoryPlot setNumberAxisToColumn(CategoryPlot categoryplot) {
// 获取纵轴
NumberAxis numberAxis = (NumberAxis) categoryplot.getRangeAxis();
// 设置纵轴的刻度线
numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 数据轴的数据标签是否自动确定(默认为true)
numberAxis.setAutoTickUnitSelection(true);
// 数据轴的数据标签
numberAxis.setStandardTickUnits(numberAxis.getStandardTickUnits());
numberAxis.setLowerBound(0); // 数据轴上的显示最小值;
numberAxis.setAutoRangeMinimumSize(1);// 1为一个间隔单位
categoryplot.setRangeAxis(numberAxis);
LayeredBarRenderer layeredBarRenderer = new LayeredBarRenderer();
// 设置柱子的边框是否显示
layeredBarRenderer.setDrawBarOutline(false);
// 设置柱体宽度
layeredBarRenderer.setMaximumBarWidth(0.08);
// 设置柱体颜色
layeredBarRenderer.setSeriesPaint(0, new Color(198, 219, 248));
categoryplot.setRenderer(layeredBarRenderer);
return categoryplot;
}
/**
* 设置图表主题样式
*/
private void setChartTheme() {
// 创建主题样式
StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
// 设置标题字体
standardChartTheme.setExtraLargeFont(new Font("宋书", Font.BOLD, 12));
// 设置图例的字体
standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 12));
// 设置轴向的字体
standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 12));
// 应用主题样式
ChartFactory.setChartTheme(standardChartTheme);
}
/**
* 生成图片
*
* @param picName
* @param jfreechart
*/
private void createPicture(String picName, JFreeChart jfreechart) {
if (picName == null || "".equals(picName.trim()) || jfreechart == null) {
return;
}
FileOutputStream fos_jpg = null;
try {
try {
fos_jpg = new FileOutputStream(picName);
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, jfreechart, 240,
155, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} finally {
if (fos_jpg != null) {
try {
fos_jpg.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 创建图表数据集
*
* @param data
* @param rowKeys
* @param columnKeys
* @return
*/
public CategoryDataset createDataset(double[][] data, String[] rowKeys,
String[] columnKeys) {
CategoryDataset dataset = getData(data, rowKeys, columnKeys);
return dataset;
}
/**
* 获取数据集
*
* @param data
* @param rowKeys
* @param columnKeys
* @return
*/
private CategoryDataset getData(double[][] data, String[] rowKeys,
String[] columnKeys) {
return DatasetUtilities
.createCategoryDataset(rowKeys, columnKeys, data);
}
}
分享到:
相关推荐
jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707
JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...
java制作jfreechart柱状图 饼状图 折线图 随机数字做的数据源 下载导入即可运行 内含jar包
public JFreeChart createChart(String Ytitle, String title, CategoryDataset lineData, CategoryDataset barData) { //参考附件 return chart; } //struts 部分 <!--begin 维优特例 --> ...
java里用JFreeChart画柱状图、折线图、雷达图,三个封装好的方法,可以直接调用。
源文件 博文链接:https://lansky07.iteye.com/blog/227571
jfreechart 图形折线,饼图,柱状图等各种图形
Struts2+JFreeChart+Myeclipse实现饼状图,柱状图,折线图。
jfreechart 生成折线图,饼图,柱状图,堆栈柱状图
java绘制图表(柱状图、饼图、折线图)包, jfreechart
使用JFreeChart绘制饼图,折线图,柱状图的代码试例
java实现的 生成饼状图 生成单组柱状图 生成多组柱状图 生成堆积柱状图 生成折线图 里面包括了所需要的 jcommon-1.0.12.jar jfreechart-1.0.8a.jar
此资源有完整柱状图,折线图,等例子,下载后可以部署运行,也可参考源码
jfreechart 与struts2的柱状图以及折线图例子,很给力呀,可以用大家请下载。
jfreechart_生成折线图,饼图,柱状图,堆栈柱状图
jfreechart使用SqlServer2000做的饼状图,柱状图,折线图。 最近在学习jfreechart,根据网上的资料做了这3个小例子,学习用的,代码有点乱!
里面有我写的三个例子,可以用的,参照图片。
开发环境为intellij15+jdk8.0; 功能:使用swing创建窗口,添加主面板,在主面板下有几个tab,通过tab切换绘制不同的图形。
Java语言纯后台生成折线图,饼图,柱状图。