1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > jfreechart折线图+柱状图 柱状图(堆叠)+折线图 饼状图 环形图

jfreechart折线图+柱状图 柱状图(堆叠)+折线图 饼状图 环形图

时间:2019-05-09 07:12:55

相关推荐

jfreechart折线图+柱状图 柱状图(堆叠)+折线图 饼状图 环形图

记录jfreechart生成图片测试程,主要是为自己研究过之后的记录:)

折线图+柱状图

柱状图(堆叠)+折线图

获取饼状图

获取环形图

jar包下载地址:/download/srying/11123104

pom.xml文件配置配置

<!-- 折线图依赖 --><dependency><groupId>jfree</groupId><artifactId>jfreechart</artifactId><version>1.0.19</version></dependency><dependency><groupId>jfree</groupId><artifactId>jcommon</artifactId><version>1.0.23</version></dependency>

package com.mon;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Rectangle;import java.awt.SystemColor;import java.io.File;//import java.io.FileOutputStream;import java.io.IOException;import java.text.DecimalFormat;//import java.text.NumberFormat;import java.util.Locale;//import mons.lang.WordUtils;import org.jfree.chart.ChartColor;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;//import org.jfree.chart.ChartFrame;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.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.DatasetRenderingOrder;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.RingPlot;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.renderer.category.StackedBarRenderer;import org.jfree.chart.renderer.category.StandardBarPainter;//import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;//import org.jfree.data.general.PieDataset;//import org.jfree.ui.RectangleEdge;import org.jfree.ui.TextAnchor;public class JFreeChartUtil2 {/*public static void main(String[] args) {DefaultCategoryDataset barDataSet = new DefaultCategoryDataset();barDataSet.addValue(0.6, "评价人数", "1月");barDataSet.addValue(0.9, "评价人数", "2月");DefaultCategoryDataset lineDataSet = new DefaultCategoryDataset();lineDataSet.addValue(0.2, "评分", "1月");lineDataSet.addValue(0.5, "评分", "2月");getPhoFilePathTest(barDataSet, lineDataSet, "test", true);}*//*** 获取生成图片数据源* 折线图+柱状图* @param barDataSet 柱状图数据* @param lineDataSet 折线图数据* @param fileName 数据文件名称* @param isPer0 第一个是否使用百分比刻度 true使用,false 不使用* @param isPer1 第二个是否使用百分比刻度 true使用,false 不使用* @param title 图片标题* @return*/@SuppressWarnings("deprecation")private static void getPhoFilePathTest(DefaultCategoryDataset barDataSet, DefaultCategoryDataset lineDataSet, String fileName, boolean isPer){//创建主题样式 ,以下代码用于解决中文乱码问题StandardChartTheme standardChartTheme=new StandardChartTheme("CN"); //设置标题字体 standardChartTheme.setExtraLargeFont(new Font("宋体",Font.BOLD,20)); //设置图例的字体 standardChartTheme.setRegularFont(new Font("宋体",Font.PLAIN,15)); //设置轴向的字体 standardChartTheme.setLargeFont(new Font("宋体",Font.PLAIN,15)); //应用主题样式 ChartFactory.setChartTheme(standardChartTheme);// 柱状图数据源// DefaultCategoryDataset barDataSet = new DefaultCategoryDataset();// barDataSet.addValue(800, "评价人数", "1月");// barDataSet.addValue(600, "评价人数", "2月");// // //折线图数据源// DefaultCategoryDataset lineDataSet = new DefaultCategoryDataset();// lineDataSet.addValue(5, "评分", "1月");// lineDataSet.addValue(4, "评分", "4月");BarRenderer barRender = new BarRenderer();//展示柱状图数值barRender.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());barRender.setBaseItemLabelsVisible(true);barRender.setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE1, TextAnchor.BASELINE_CENTER)); //最短的BAR长度,避免数值太小而显示不出barRender.setMinimumBarLength(0.5);// 设置柱形图上的文字偏离值 barRender.setItemLabelAnchorOffset(10D);//设置柱子的最大宽度 barRender.setMaximumBarWidth(0.03); barRender.setItemMargin(0.000000005); // 设置柱状图之间的距离0.1代表10%barRender.setBarPainter(new StandardBarPainter());//设置柱子为平面图不是立体的 barRender.setSeriesPaint(0,new Color(65,105,225)); // 给series1 Bar barRender.setShadowVisible(false); //不显示阴影barRender.setItemLabelAnchorOffset(3D);if(isPer){barRender.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",DecimalFormat.getPercentInstance()));// //大括号内为0,显示s barRender.setItemLabelsVisible(true);}LineAndShapeRenderer lineRender = new LineAndShapeRenderer();//展示折线图节点值lineRender.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());lineRender.setBaseItemLabelsVisible(true);lineRender.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));// 设置折线图上的文字偏离值 lineRender.setItemLabelAnchorOffset(8D);BasicStroke brokenLine = new BasicStroke(2f,//线条粗细 BasicStroke.CAP_SQUARE, //端点风格 BasicStroke.JOIN_MITER, //折点风格 8.f,//折点处理办法 ,如果要实线把该参数设置为NULL new float[]{8.0f },//虚线数组 0.0f);//设置第一条折线的风格lineRender.setSeriesStroke(0,brokenLine);CategoryPlot plot = new CategoryPlot();plot.setDataset(0, barDataSet);plot.setDataset(1, lineDataSet);plot.setRenderer(0, barRender);plot.setRenderer(1, lineRender);plot.setDomainAxis(new CategoryAxis());//设置水平方向背景线颜色 plot.setRangeGridlinePaint(Color.gray);//设置是否显示水平方向背景线,默认值为true plot.setRangeGridlinesVisible(true);//设置垂直方向背景线颜色 plot.setDomainGridlinePaint(Color.gray); //设置是否显示垂直方向背景线,默认值为true plot.setDomainGridlinesVisible(true); //设置图表透明图0.0~1.0范围。0.0为完全透明,1.0为完全不透明。 plot.setForegroundAlpha(0.7F);NumberAxis vn = new NumberAxis();DecimalFormat df = new DecimalFormat("0.00%"); if(isPer){vn.setUpperBound(1);// 设置数据轴坐标从0开始 vn.setAutoRangeIncludesZero(true);vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式 }plot.setRangeAxis(vn);NumberAxis vn2 = new NumberAxis();if(isPer){vn2.setUpperBound(1);// 设置数据轴坐标从0开始 vn2.setAutoRangeIncludesZero(true); vn2.setNumberFormatOverride(df); // 数据轴数据标签的显示格式 }//设置Y轴刻度plot.setRangeAxis(1, vn2);// 设置折线图数据源应用Y轴右侧刻度plot.mapDatasetToRangeAxis(1, 1);for (int i = 0; i < plot.getRangeAxisCount(); i++){ValueAxis rangeAxis = plot.getRangeAxis(i);//设置最高的一个柱与图片顶端的距离rangeAxis.setUpperMargin(0.25);}CategoryAxis categoryAxis = plot.getDomainAxis();//X轴分类标签以45度倾斜categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);JFreeChart chart = new JFreeChart(plot);chart.setTitle("汽车口碑排行榜");chart.setBackgroundPaint(SystemColor.WHITE);ChartFrame chartFrame=new ChartFrame("汽车口碑排行榜",chart); //以合适的大小展现图形 chartFrame.pack();//图形是否可见chartFrame.setVisible(true);// String path = System.getProperty("user.dir") + File.separator + "template" + File.separator;// String filePath = path+ fileName +".png";// //图片名称// File file = new File(filePath);//try {//ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);//} catch (IOException e) {//e.printStackTrace();//}// return filePath;}//---------------------------------------------------------------------------------------------------------------------- /*public static void main(String[] args) {double[] forwardItems = {12,34,45};//转发量double[] commentItems = {24,14,35};//评论量double[] seeItems = {32,24,25};//查看量String[] items = { "微博", "微信", "测试" };String[] series = new String[] { "转发", "评论", "查看" };double[][] data = new double[][] { forwardItems, commentItems, seeItems };CategoryDataset barDataset = DatasetUtilities.createCategoryDataset(series, items, data);DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();lineDataset.addValue(10, "文章数", items[0]);lineDataset.addValue(20, "文章数", items[1]);lineDataset.addValue(30, "文章数", items[2]);getPhoFilePathYulun(barDataset, lineDataset, "图片标题", "pubOpinion");}*//*** * 柱状图(堆叠)+折线图* @param categoryBarDataset 柱状图数据* @param categoryLineDataset 折线图数据* @param title 图片标题* @return*/public static String getPhoFilePathYulun(CategoryDataset categoryBarDataset, CategoryDataset categoryLineDataset, String title,String fileName){JFreeChart chart = createCharts(categoryBarDataset,categoryLineDataset, title);// 处理主标题的乱码chart.getTitle().setFont(new Font("黑体", Font.BOLD, 18));chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,10));//图例文字// 获取图表区域对象CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();// 获取X轴的对象CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();categoryAxis.setLabelFont(new Font("黑体", Font.BOLD, 10));categoryAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 10));// 获取Y轴的对象NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();// 处理X轴上的乱码categoryAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 10));// 处理X轴外的乱码categoryAxis.setLabelFont(new Font("黑体", Font.BOLD, 10));// 处理Y轴上的乱码numberAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 10));// 处理Y轴外的乱码numberAxis.setLabelFont(new Font("黑体", Font.BOLD, 10));/*String path = System.getProperty("user.dir") + File.separator + "template" + File.separator;String filePath = path + fileName + ".png";File file = new File(filePath);try {ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);} catch (IOException e) {e.printStackTrace();}return filePath;*/ChartFrame chartFrame=new ChartFrame("汽车口碑排行榜",chart); //以合适的大小展现图形 chartFrame.pack();//图形是否可见chartFrame.setVisible(true);return fileName;}/*** 初始化* @param categoryBarDataset* @param categoryLineDataset* @return*/private static JFreeChart createCharts(CategoryDataset categoryBarDataset, CategoryDataset categoryLineDataset, String title) {//参数: title,x轴说明,y轴说明,图例JFreeChart chart = ChartFactory.createBarChart(title, "", "", categoryBarDataset, PlotOrientation.VERTICAL,true, true, true);CategoryPlot plot = (CategoryPlot) chart.getPlot();// set right marginplot.getDomainAxis().setUpperMargin(0.1);// set X axis Label linesplot.getDomainAxis().setMaximumCategoryLabelLines(2);//NumberAxis na = (NumberAxis) plot.getRangeAxis();// stack bar chartStackedBarRenderer rederer = new StackedBarRenderer();plot.setRenderer(0, rederer);rederer.setBaseItemLabelsVisible(true);rederer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());rederer.setBaseItemLabelFont(new Font("Calibri", Font.ITALIC, 15));rederer.setMaximumBarWidth(0.07);rederer.setMinimumBarLength(0.1);rederer.setBarPainter(new StandardBarPainter());rederer.setSeriesPaint(0, new Color(65,105,225));rederer.setSeriesPaint(1, new Color(203,196,52));rederer.setSeriesPaint(2, new Color(128,7,248));// line chartLineAndShapeRenderer lineRenderer = new LineAndShapeRenderer();plot.setRenderer(1, lineRenderer);lineRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());lineRenderer.setBaseItemLabelFont(new Font("Calibri", Font.ITALIC, 15));lineRenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE12, TextAnchor.BASELINE_LEFT));lineRenderer.setBaseItemLabelsVisible(true);lineRenderer.setBaseShapesVisible(true);// point stylelineRenderer.setSeriesShape(0, new Rectangle(5, 5));lineRenderer.setBaseShapesVisible(true);NumberAxis rightYAxis = new NumberAxis("");rightYAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());plot.setRangeAxis(1, rightYAxis);plot.setDataset(1, categoryLineDataset);plot.mapDatasetToRangeAxis(1, 1);// set render orderplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);return chart;} //----------------------------------------------------------------------------------------------------------------------//参考 /xiaowanziwuha/article/details/77828693/*public static void main(String[] args) {DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("男", new Double(20));dataset.setValue("女", new Double(20));dataset.setValue("其他", new Double(40));getPhoFilePathPie(dataset, "图片标题");}*//*** 获取饼状图* * @return*/public static String getPhoFilePathPie(DefaultPieDataset dataset, String chartTitle){/*DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("男", new Double(20));dataset.setValue("女", new Double(20));dataset.setValue("其他", new Double(40));*/JFreeChart chart = ChartFactory.createPieChart(chartTitle, // chartTitledataset, // datatrue, // include legendtrue, false);setChart(chart);PiePlot pieplot = (PiePlot) chart.getPlot();//设置颜色,可以删除pieplot.setSectionPaint("男", Color.decode("#6495ED")); pieplot.setSectionPaint("女", Color.decode("#F4A460")); pieplot.setSectionPaint("其他", Color.decode("#FFDEAD")); pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}人)/{2}"));//设置标签字体pieplot.setLabelFont(new Font("宋体", 0, 12));//设置图例项目字体chart.getLegend().setItemFont(new Font("宋体", 0, 12));/* String path = "e:\\test\\PieChart2.png";try {// 保存图片到指定文件夹ChartUtilities.saveChartAsPNG(new File(path), chart, 1000, 700);System.err.println("成功");} catch (Exception e) {System.err.println("创建图形时出错");}return path;*/ChartFrame chartFrame=new ChartFrame("汽车口碑排行榜",chart); //以合适的大小展现图形 chartFrame.pack();//图形是否可见chartFrame.setVisible(true);return chartTitle;}/*** 初始化* @param chart*/public static void setChart(JFreeChart chart) {chart.setTextAntiAlias(true);PiePlot pieplot = (PiePlot) chart.getPlot();// 设置图表背景颜色pieplot.setBackgroundPaint(ChartColor.WHITE);pieplot.setLabelBackgroundPaint(null);// 标签背景颜色pieplot.setLabelOutlinePaint(null);// 标签边框颜色pieplot.setLabelShadowPaint(null);// 标签阴影颜色pieplot.setOutlinePaint(null); // 设置绘图面板外边的填充颜色pieplot.setShadowPaint(null); // 设置绘图面板阴影的填充颜色pieplot.setSectionOutlinesVisible(false); pieplot.setNoDataMessage("没有可供使用的数据!"); }public static void main(String[] args) {DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("1.0分-2.0分", new Double(100));dataset.setValue("2.0分-3.0分", new Double(10));dataset.setValue("3.0分-4.0分", new Double(30));dataset.setValue("4.0分-5.0分", new Double(40));dataset.setValue("5.0分-6.0分", new Double(80));dataset.setValue("6.0分-7.0分", new Double(60));dataset.setValue("7.0分-8.0分", new Double(50));dataset.setValue("8.0分-9.0分", new Double(20));//保存为图片//createRingChart(dataset,"title","test");//运行为java输出图片final ChartFrame frame = new ChartFrame("Interval Bar Chart Demo", createRingChart(dataset,"title","test"));frame.pack();frame.setVisible(true);}/*** 获取环形图 * * 参考:/u014315941/article/details/50802800* @param dataset* @param 图片标题* @param 生成图片名称* @return*/public static JFreeChart createRingChart(DefaultPieDataset dataset,String title, String fileName) {JFreeChart chart5 = ChartFactory.createRingChart(title, dataset, true, true,Locale.CHINESE);setRingChart(chart5);//保存为图片/*String path = System.getProperty("user.dir") + File.separator + "template" + File.separator;String filePath = path+ fileName+".png";//图片名称File file = new File(filePath);try {ChartUtilities.saveChartAsJPEG(file, chart5, 800, 600);} catch (IOException e) {e.printStackTrace();}*///return filePath;return chart5;}/*** * @param chart*/@SuppressWarnings("deprecation")public static void setRingChart(JFreeChart chart) {chart.setBackgroundPaint(Color.white);RingPlot ringplot = (RingPlot) chart.getPlot();ringplot.setLabelBackgroundPaint(Color.WHITE);ringplot.setSectionPaint(0, new Color(255,192,203));ringplot.setSectionPaint(1, new Color(100,149,237));ringplot.setSectionPaint(2, new Color(152,251,152));ringplot.setSectionPaint(3, new Color(151,210,205));ringplot.setSectionPaint(4, new Color(220,220,220));ringplot.setSectionPaint(5, new Color(236,150,79));ringplot.setSectionPaint(6, new Color(191,179,64));ringplot.setSectionPaint(7, new Color(211,176,238));// ringplot.setLabelLinksVisible(false);// 设置饼状图和环形图的显示数字。0代表显示文字说明,1代表显示数字,2代表显示数字以百分比的方式如果多个结合{0}:{1}ringplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{2}"));ringplot.setSimpleLabels(true);ringplot.setLabelBackgroundPaint(new Color(1.0F, 0.75F, 0.0F, 0.0F));ringplot.setLabelFont(new Font("sans-serif", Font.PLAIN, 12));ringplot.setLabelOutlinePaint(new Color(1.0F, 0.75F, 0.0F, 0.0F));ringplot.setLabelPaint(Color.white);ringplot.setLabelFont(new Font("微软雅黑", Font.PLAIN, 16));ringplot.setLabelShadowPaint(new Color(1.0F, 0.75F, 0.0F, 0.0F));TextTitle title = chart.getTitle();title.setFont(new Font("sans-serif", Font.PLAIN, 24));// 设置深度,即带颜色圆环的宽度ringplot.setSectionDepth(0.5d);// 设置环形图背景颜色ringplot.setBackgroundPaint(Color.white);chart.getLegend().setItemFont(new Font("微软雅黑", Font.BOLD, 12));}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。