jfreeChart 工具类<基本图>
?
package org.gbicc.sys.util;import java.awt.BasicStroke;import java.awt.Color;import java.awt.RenderingHints;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Random;import javax.servlet.ServletOutputStream;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;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.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.labels.StandardCategoryToolTipGenerator;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.labels.StandardPieToolTipGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.DatasetRenderingOrder;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.BarRenderer3D;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.renderer.category.StackedBarRenderer;import org.jfree.chart.renderer.category.StackedBarRenderer3D;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DefaultPieDataset;import org.jfree.ui.RectangleInsets;import org.jfree.util.Rotation;/** * jfreeChart工具类 * * @project SClientSpring * @author tangdu * @time 2012-3-28 * @see * tangdu0228yes@163.com */public class JfreeChartUtil {/* * java.awt 字体 */private static java.awt.Font heiFont = new java.awt.Font("黑体",java.awt.Font.PLAIN, 15);// 黑体private static java.awt.Font heiFontX = new java.awt.Font("黑体",java.awt.Font.PLAIN, 12);// 黑体private static java.awt.Font songFont = new java.awt.Font("STSongStd-Light", java.awt.Font.PLAIN, 12);// 宋体//拆线图折点形式private static float dashes[] = { 8.0f }; // 定义虚线数组private static BasicStroke brokenLine = new BasicStroke(1.6f,// 线条粗细 BasicStroke.JOIN_ROUND, // 端点风格 BasicStroke.JOIN_ROUND, // 折点风格 8.f, // 折点处理办法 dashes, // 虚线数组 0.0f); // 虚线偏移量//图表默认宽度private static int WIDTH=500;private static int HEIGHT=300;/** * 数据对象--(柱形,折线数据 格式) * * @param data * data 二维数据格式 * @param rowKeys * 行 * @param columnKeys * 列 * @return * @throws Exception */public static DefaultCategoryDataset getBarLineData(List<ArrayList<Double>> data, List<String> rowKeys,List<String> columnKeys) throws Exception {DefaultCategoryDataset defaultpiedataset = null;if (data != null && rowKeys != null && columnKeys != null) {if (data.size() == rowKeys.size()) {defaultpiedataset = new DefaultCategoryDataset();for (int i = 0; i < rowKeys.size(); i++) {List<Double> list = data.get(i);for (int j = 0; j < columnKeys.size(); j++) {defaultpiedataset.addValue(list.get(j), rowKeys.get(i),columnKeys.get(j));}}}}return defaultpiedataset;}/** * 数据对象--(饼图数据 格式) * * @param map * 数据格式 * @return * @throws Exception */public static DefaultPieDataset getPieData(Map<String, Double> map)throws Exception {DefaultPieDataset defaultpiedataset = null;if (map != null) {defaultpiedataset = new DefaultPieDataset();for (Entry<String, Double> entry : map.entrySet()) {defaultpiedataset.setValue(entry.getKey(), entry.getValue());}}return defaultpiedataset;}/** * 3d 或是2d 柱形图 * @param title 标题 * @param titlex x轴 * @param titley y轴 * @param defaultpiedataset 数据集 * @param is3D 是否3d * @param colorBar 颜色集 * @param out 输出流 * @throws Exception */public static void createBarChart(String title, String titlex,String titley, DefaultCategoryDataset defaultpiedataset,boolean is3D,String colorBar[], ServletOutputStream out) throws Exception {JFreeChart chart = null;CategoryPlot categoryplot = null;BarRenderer customBarRenderer = null;if (is3D) {chart = ChartFactory.createBarChart3D(title, titlex, titley,defaultpiedataset, PlotOrientation.VERTICAL, true, true,false);categoryplot = (CategoryPlot) chart.getPlot();// 设置柱子颜色customBarRenderer = (BarRenderer3D) categoryplot.getRenderer();} else {chart = ChartFactory.createBarChart(title, titlex, titley,defaultpiedataset, PlotOrientation.VERTICAL, true, true,false);categoryplot = (CategoryPlot) chart.getPlot();// 设置柱子颜色customBarRenderer = (BarRenderer) categoryplot.getRenderer();}// 设置柱子颜色if (colorBar != null) {for (int i = 0; i < colorBar.length; i++) {customBarRenderer.setSeriesPaint(i,Color.decode(colorBar[i]));}}// 设置标题字体样式TextTitle textTitle = chart.getTitle();textTitle.setFont(heiFont);// 设置柱状体颜色categoryplot.getRenderer().setSeriesPaint(0, new Color(228, 109, 10));NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();CategoryAxis domainAxis = categoryplot.getDomainAxis();// y轴 -数据轴网格是否可见categoryplot.setRangeGridlinesVisible(true);// x轴 -数据轴网格是否可见categoryplot.setDomainGridlinesVisible(false);// 没有 数据categoryplot.setNoDataMessage("没有数据可以显示");categoryplot.setNoDataMessageFont(heiFont);categoryplot.setRangeGridlinePaint(Color.GRAY);// y轴虚线色彩categoryplot.setDomainGridlinePaint(Color.WHITE);// x轴虚线色彩categoryplot.setBackgroundPaint(Color.WHITE);// 面板颜色// 设置标题倾斜度-x轴domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);// 设置X轴坐标上的字体样式domainAxis.setTickLabelFont(heiFontX);// 设置X轴的标题字体样式domainAxis.setLabelFont(heiFont);// 设置Y轴坐标上的字体样式numberaxis.setTickLabelFont(heiFontX);// 设置Y轴的标题字体样式numberaxis.setLabelFont(heiFont);// 设置图片最底部字体样式if (chart.getLegend() != null) {chart.getLegend().setItemFont(heiFontX);}// 设置颜色/* * BarRenderer renderer = (BarRenderer) categoryplot.getRenderer(); * renderer.setDrawBarOutline(false); */// 输出if (out == null) {ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\barChart.jpg"), chart, WIDTH, HEIGHT);} else {ChartUtilities.writeChartAsPNG(out, chart, WIDTH, HEIGHT);out.close();}}/** * 3d 或是2d 柱形堆积图 * @param title 标题 * @param titlex x轴 * @param titley y轴 * @param defaultpiedataset 数据集 * @param is3D 是否3d * @param colorBar 颜色集 * @param out 输出流 * @throws Exception */public static void createStackBarChart(String title, String titlex,String titley, DefaultCategoryDataset defaultpiedataset,boolean is3D,String colorBar[], ServletOutputStream out) throws Exception {JFreeChart chart = null;CategoryPlot categoryplot = null;BarRenderer customBarRenderer = null;if (is3D) {chart = ChartFactory.createStackedBarChart3D(title, titlex, titley,defaultpiedataset, PlotOrientation.VERTICAL, true, true,false);categoryplot = (CategoryPlot) chart.getPlot();// 设置柱子颜色customBarRenderer = (StackedBarRenderer3D) categoryplot.getRenderer();} else {chart = ChartFactory.createStackedBarChart(title, titlex, titley,defaultpiedataset, PlotOrientation.VERTICAL, true, true,false);categoryplot = (CategoryPlot) chart.getPlot();// 设置柱子颜色customBarRenderer = (StackedBarRenderer) categoryplot.getRenderer();}// 设置柱子颜色if (colorBar != null) {for (int i = 0; i < colorBar.length; i++) {customBarRenderer.setSeriesPaint(i,Color.decode(colorBar[i]));}}// 设置标题字体样式TextTitle textTitle = chart.getTitle();textTitle.setFont(heiFont);// 设置柱状体颜色categoryplot.getRenderer().setSeriesPaint(0, new Color(228, 109, 10));NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();CategoryAxis domainAxis = categoryplot.getDomainAxis();// y轴 -数据轴网格是否可见categoryplot.setRangeGridlinesVisible(true);// x轴 -数据轴网格是否可见categoryplot.setDomainGridlinesVisible(false);// 没有 数据categoryplot.setNoDataMessage("没有数据可以显示");categoryplot.setNoDataMessageFont(heiFont);categoryplot.setRangeGridlinePaint(Color.GRAY);// y轴虚线色彩categoryplot.setDomainGridlinePaint(Color.WHITE);// x轴虚线色彩categoryplot.setBackgroundPaint(Color.WHITE);// 面板颜色// 设置标题倾斜度-x轴domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);// 设置X轴坐标上的字体样式domainAxis.setTickLabelFont(heiFontX);// 设置X轴的标题字体样式domainAxis.setLabelFont(heiFont);// 设置Y轴坐标上的字体样式numberaxis.setTickLabelFont(heiFontX);// 设置Y轴的标题字体样式numberaxis.setLabelFont(heiFont);// 设置图片最底部字体样式if (chart.getLegend() != null) {chart.getLegend().setItemFont(heiFontX);}// 设置颜色/* * BarRenderer renderer = (BarRenderer) categoryplot.getRenderer(); * renderer.setDrawBarOutline(false); */// 输出if (out == null) {ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\stackbarChart.jpg"), chart, WIDTH, HEIGHT);} else {ChartUtilities.writeChartAsPNG(out, chart, WIDTH, HEIGHT);out.close();}}/** * 折线图 * * @param title * 标题 * @param titlex * x标题 * @param titley * y标题 * @param defaultpiedataset * 数据 * @param colorBar * 数据集 * @param out * servlet 输出流 * @throws Exception */public static void createLineChart(String title, String titlex,String titley, DefaultCategoryDataset defaultpiedataset,String colorLine[],ServletOutputStream out) throws Exception {JFreeChart chart = ChartFactory.createLineChart(title, titlex, titley,defaultpiedataset, PlotOrientation.VERTICAL, true, true, false);// 设置标题字体样式TextTitle textTitle = chart.getTitle();textTitle.setFont(heiFont);// 设置柱状体颜色CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();categoryplot.getRenderer().setSeriesPaint(0, new Color(85, 139, 185));categoryplot.setDomainGridlinesVisible(true);// y轴 -数据轴网格是否可见categoryplot.setRangeGridlinesVisible(true);// x轴 -数据轴网格是否可见categoryplot.setDomainGridlinesVisible(false);// 没有 数据categoryplot.setNoDataMessage("没有数据可以显示");categoryplot.setRangeGridlinePaint(Color.GRAY);// y轴虚线色彩categoryplot.setDomainGridlinePaint(Color.WHITE);// x轴虚线色彩categoryplot.setBackgroundPaint(Color.WHITE);// 面板颜色// 设置轴和面板之间的距离categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();CategoryAxis domainAxis = categoryplot.getDomainAxis();//domainAxis.setVisible(false);// x轴是否斜体角度domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);// 设置X轴坐标上的字体样式domainAxis.setTickLabelFont(heiFontX);// 设置X轴的标题字体样式domainAxis.setLabelFont(heiFont);// 设置Y轴坐标上的字体样式numberaxis.setTickLabelFont(heiFontX);// 设置Y轴的标题字体样式numberaxis.setLabelFont(heiFont);// 设置图片最底部字体样式if (chart.getLegend() != null) {chart.getLegend().setItemFont(heiFontX);}numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());numberaxis.setAutoRangeIncludesZero(true);numberaxis.setUpperMargin(0.20);numberaxis.setLabelAngle(Math.PI / 2.0);LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();//设置折线颜色if (colorLine != null) {for (int i = 0; i < colorLine.length; i++) {lineandshaperenderer.setSeriesPaint(i,Color.decode(colorLine[i]));//lineandshaperenderer.setSeriesStroke(i, brokenLine);}}//lineandshaperenderer.setSeriesVisibleInLegend(false);//不显示x轴标题栏lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见lineandshaperenderer.setBaseLinesVisible(true); // series// 点(即数据点)间有连线可见// 输出if (out == null) {ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\lineChart.jpg"), chart, WIDTH, HEIGHT);} else {ChartUtilities.writeChartAsPNG(out, chart, WIDTH, HEIGHT);out.close();}}/** * 饼图2d,或 是 3D * @param dataset 数据集 * @param chartTitle 标题 * @param is3D 是否是3d * @param isLeng 是否显示标题栏 x轴 * @param out 输出流 * @throws Exception */public static void create3DPieChart(DefaultPieDataset dataset,String chartTitle, boolean is3D,boolean isLeng,String colorPie[],ServletOutputStream out) throws Exception {// 利用工厂类来创建3D饼图JFreeChart chart = null;PiePlot plot = null;if (is3D) {chart = ChartFactory.createPieChart3D(chartTitle, dataset, false,true, false);plot = (PiePlot3D) chart.getPlot();} else {chart = ChartFactory.createPieChart(chartTitle, dataset, false,true, false);plot = (PiePlot) chart.getPlot();}// 使下说明标签字体清晰,去锯齿类似于chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(false);// 图片背景色chart.setBackgroundPaint(Color.white);chart.setBorderPaint(Color.WHITE);chart.setBorderVisible(false);chart.setTextAntiAlias(false);// 设置图标题的字体重新设置title(否组有些版本Title会出现乱码)chart.getTitle().setFont(songFont);// 设置图例(Legend)上的文字(//底部的字体)if(!isLeng){chart.getLegend().setItemFont(songFont);}// 指定饼图轮廓线的颜色plot.setBaseSectionOutlinePaint(Color.WHITE);plot.setBaseSectionPaint(Color.WHITE);// 设置无数据时的信息plot.setNoDataMessage("没有可用数据");plot.setNoDataMessageFont(heiFont);plot.setOutlineVisible(false);// 设置无数据时的信息显示颜色plot.setNoDataMessagePaint(Color.red);// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位/*plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));*/plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));plot.setLabelFont(songFont);//设置颜色if(colorPie!=null){for(int i=0;i<colorPie.length;i++){plot.setSectionPaint(i,Color.decode(colorPie[i]));}}// 指定图片的透明度(0.0-1.0)plot.setForegroundAlpha(0.65f);plot.setBackgroundPaint(Color.WHITE);// 设置第一个 饼块section 的开始位置,默认是12点钟方向plot.setStartAngle(90);plot.setCircular(true);//圆形plot.setLabelGap(0.01D);//间距plot.setToolTipGenerator(new StandardPieToolTipGenerator());//设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制plot.setDirection(Rotation.ANTICLOCKWISE);//设置突出显示的数据块//plot.setExplodePercent("One", 0.1D);// 输出if (out == null) {ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\pie3DChart.jpg"), chart, WIDTH, HEIGHT);} else {ChartUtilities.writeChartAsPNG(out, chart, WIDTH, HEIGHT);out.close();}}/** * 创建复合图 bar_line * @param chartTitle * @param Xname x轴title * @param Yname y轴tilte * @param dataset1 bar数据集 * @param dataset2 line数据集 * @param is3D 是否是3D * @param colorBar bar颜色 * @param colorLine line颜色 * @param out 输出流 * @throws Exception */public static void createAndChart(String chartTitle, String Xname,String Yname, CategoryDataset dataset1, CategoryDataset dataset2,boolean is3D,String colorBar[],String colorLine[], ServletOutputStream out)throws Exception {JFreeChart chart ;BarRenderer renderer;CategoryPlot plot;if(is3D){chart=ChartFactory.createBarChart3D(chartTitle, Xname, Yname,dataset1, PlotOrientation.VERTICAL, true, true, false);plot = chart.getCategoryPlot();// 获得图表区域对象renderer=new BarRenderer3D();}else{chart=ChartFactory.createBarChart(chartTitle, Xname, Yname,dataset1, PlotOrientation.VERTICAL, true, true, false);plot = chart.getCategoryPlot();// 获得图表区域对象renderer=new BarRenderer();}renderer.setShadowVisible(false);//是否有阴影// 设置标题字体样式TextTitle textTitle = chart.getTitle();textTitle.setFont(heiFont);chart.getLegend().setItemFont(songFont);// y置ValueAxis rangeAxis = plot.getRangeAxis();rangeAxis.setLabelFont(songFont);rangeAxis.setTickLabelFont(songFont);//rangeAxis.setUpperBound(10);// 置Y值 最大 sumCountErrorNum//rangeAxis.setLowerMargin(0.05); // 置最低的一Item片底端的距//rangeAxis.setUpperMargin(0.05);plot.setRangeAxis(rangeAxis);// 示柱的值//renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());//renderer.setItemLabelsVisible(true); // renderer.setMinimumBarLength(0.5);//置柱高度plot.setRenderer(renderer);// 设置柱子颜色if (colorBar != null) {for (int i = 0; i < colorBar.length; i++) {renderer.setSeriesPaint(i,Color.decode(colorBar[i]));}}//x轴CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setLabelFont(songFont);domainAxis.setTickLabelFont(songFont);//domainAxis.setCategoryMargin(0.1);// 之的距10%domainAxis.setMaximumCategoryLabelWidthRatio(4f);// 上的 Lable 是否完整示domainAxis.setUpperMargin(0.05);domainAxis.setLowerMargin(0.05);//domainAxis.setCategoryLabelPositions(CategoryLabelPositions//.createUpRotationLabelPositions(Math.PI / 7.0));//chart.setAntiAlias(true);chart.setBackgroundPaint(Color.WHITE);chart.setBorderPaint(Color.BLACK);//chart.setBorderVisible(true);// 创建折线图plot.setDataset(1, dataset2);plot.mapDatasetToRangeAxis(1, 1);NumberAxis numberaxis = new NumberAxis();// 折Y名(右)numberaxis.setLabelFont(songFont);plot.setRangeAxis(1, numberaxis);// 定折示式LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();lineandshaperenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());// 设置柱子颜色if (colorLine != null) {for (int i = 0; i < colorLine.length; i++) {lineandshaperenderer.setSeriesPaint(i,Color.decode(colorLine[i]));}}// 设置数据点显示lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//lineandshaperenderer.setBaseItemLabelsVisible(true);plot.setRenderer(1, lineandshaperenderer);plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);/*LegendTitle legendtitle = new LegendTitle(plot.getRenderer(0));legendtitle.setMargin(new RectangleInsets(2D, 2D, 2D, 2D));legendtitle.setBorder(new BlockBorder());LegendTitle legendtitle1 = new LegendTitle(plot.getRenderer(1));legendtitle1.setMargin(new RectangleInsets(2D, 2D, 2D, 2D));legendtitle1.setBorder(new BlockBorder());BlockContainer blockcontainer = new BlockContainer(new BorderArrangement());blockcontainer.add(legendtitle, RectangleEdge.LEFT);blockcontainer.add(legendtitle1, RectangleEdge.RIGHT);blockcontainer.add(new EmptyBlock(2000D, 0.0D));CompositeTitle compositetitle = new CompositeTitle(blockcontainer);compositetitle.setPosition(RectangleEdge.BOTTOM);chart.addSubtitle(compositetitle);*///设置plotplot.setNoDataMessage("没有数据可以显示");plot.setNoDataMessageFont(heiFont);plot.setRangeGridlinePaint(Color.GRAY);// y轴虚线色彩plot.setDomainGridlinePaint(Color.WHITE);// x轴虚线色彩plot.setBackgroundPaint(Color.WHITE);// 面板颜色// 输出if (out == null) {ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\fuheChar2t.jpg"), chart, WIDTH, HEIGHT);} else {ChartUtilities.writeChartAsPNG(out, chart, WIDTH, HEIGHT);out.close();}}/** * 创建叠加图 bar_stacked_line * @param chartTitle * @param Xname x轴title * @param Yname y轴tilte * @param dataset1 bar数据集 * @param dataset2 line数据集 * @param is3D 是否是3D * @param colorBar bar颜色 * @param colorLine line颜色 * @param out 输出流 * @throws Exception */public static void createAndStackChart(String chartTitle, String Xname,String Yname, CategoryDataset dataset1, CategoryDataset dataset2,boolean is3D,String colorBar[],String colorLine[], ServletOutputStream out)throws Exception {JFreeChart chart ;BarRenderer renderer;CategoryPlot plot;if(is3D){chart=ChartFactory.createStackedBarChart3D(chartTitle, Xname, Yname,dataset1, PlotOrientation.VERTICAL, true, true, false);plot = chart.getCategoryPlot();// 获得图表区域对象renderer=new StackedBarRenderer3D();}else{chart=ChartFactory.createStackedBarChart(chartTitle, Xname, Yname,dataset1, PlotOrientation.VERTICAL, true, true, false);plot = chart.getCategoryPlot();// 获得图表区域对象renderer=new StackedBarRenderer();}renderer.setShadowVisible(false);//是否有阴影// 设置标题字体样式TextTitle textTitle = chart.getTitle();textTitle.setFont(heiFont);chart.getLegend().setItemFont(songFont);// y置ValueAxis rangeAxis = plot.getRangeAxis();//设置折点格式//rangeAxis.setAxisLineStroke(brokenLine);rangeAxis.setLabelFont(songFont);rangeAxis.setTickLabelFont(songFont);//rangeAxis.setUpperBound(10);// 置Y值 最大 sumCountErrorNum//rangeAxis.setLowerMargin(0.05); // 置最低的一Item片底端的距//rangeAxis.setUpperMargin(0.05);plot.setRangeAxis(rangeAxis);// 示柱的值//renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());//renderer.setItemLabelsVisible(true); // renderer.setMinimumBarLength(0.5);//置柱高度plot.setRenderer(renderer);// 设置柱子颜色if (dataset1 != null) {for (int i = 0; i < colorBar.length; i++) {//设置渐变//GradientPaint gp = new GradientPaint();//renderer.setSeriesPaint(i, gp);renderer.setSeriesPaint(i,Color.decode(colorBar[i]));}}//x轴CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setLabelFont(songFont);domainAxis.setTickLabelFont(songFont);//domainAxis.setCategoryMargin(0.1);// 之的距10%domainAxis.setMaximumCategoryLabelWidthRatio(4f);// 上的 Lable 是否完整示domainAxis.setUpperMargin(0.05);domainAxis.setLowerMargin(0.05);chart.setBackgroundPaint(Color.WHITE);chart.setBorderPaint(Color.BLACK);// 创建折线图plot.setDataset(1, dataset2);plot.mapDatasetToRangeAxis(1, 1);NumberAxis numberaxis = new NumberAxis();// 折Y名(右)numberaxis.setLabelFont(songFont);plot.setRangeAxis(1, numberaxis);// 定折示式LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();lineandshaperenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());// 设置柱子颜色if (dataset2 != null) {for (int i = 0; i < colorLine.length; i++) {lineandshaperenderer.setSeriesPaint(i,Color.decode(colorLine[i]));//lineandshaperenderer.setSeriesStroke(i, brokenLine);}}// 设置数据点显示lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());plot.setRenderer(1, lineandshaperenderer);plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);//设置plotplot.setNoDataMessage("没有数据可以显示");plot.setNoDataMessageFont(heiFont);plot.setRangeGridlinePaint(Color.GRAY);// y轴虚线色彩plot.setDomainGridlinePaint(Color.WHITE);// x轴虚线色彩plot.setBackgroundPaint(Color.WHITE);// 面板颜色// 输出if (out == null) {ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\stackedChart.jpg"), chart, WIDTH, HEIGHT);} else {ChartUtilities.writeChartAsPNG(out, chart, WIDTH, HEIGHT);out.close();}}/** * 随机生成16制颜色 * * @return */public static String getRandColorCode() {String r, g, b;Random random = new Random();r = Integer.toHexString(random.nextInt(256)).toUpperCase();g = Integer.toHexString(random.nextInt(256)).toUpperCase();b = Integer.toHexString(random.nextInt(256)).toUpperCase();r = r.length() == 1 ? "0" + r : r;g = g.length() == 1 ? "0" + g : g;b = b.length() == 1 ? "0" + b : b;return "#" + r + g + b;}}??