package com.citi.dashboard.excel.graph; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.ItemLabelAnchor; import org.jfree.chart.labels.ItemLabelPosition; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.TextAnchor; public class Bar implements Graph{ private String title; private String categoryAxisLabel; private String valueAxisLabel; private List<BarDataset> datasets; private boolean legend; private boolean tooltips; private boolean urls; private String remark; private int width; private int height; public Bar() {} @Override public String createGraph(Graph graphData) throws Exception { // create the dataset... final DefaultCategoryDataset dcDataset = new DefaultCategoryDataset(); if(datasets != null && datasets.size() > 0) { for(BarDataset dataset : datasets){ dcDataset.addValue(dataset.getValue()*100, dataset.getRowKey(), dataset.getColumnKey()); } } final JFreeChart chart = ChartFactory.createBarChart3D(this.title, // chart title this.categoryAxisLabel, // domain axis label this.valueAxisLabel, // range axis label dcDataset, // data PlotOrientation.VERTICAL, // orientation this.legend, // include legend this.tooltips, // tooltips? this.urls // URLs? ); CategoryPlot categoryplot = chart.getCategoryPlot(); BarRenderer3D custombarrenderer3d = new BarRenderer3D(); DecimalFormat df = new DecimalFormat("0.00%"); custombarrenderer3d .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator( "{2}", df)); custombarrenderer3d.setItemLabelAnchorOffset(10D); custombarrenderer3d .setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); categoryplot.setRenderer(custombarrenderer3d); custombarrenderer3d.setBaseItemLabelsVisible(true); custombarrenderer3d.setMaximumBarWidth(0.050000000000000003D); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); numberaxis.setNumberFormatOverride(NumberFormat.getPercentInstance()); numberaxis.setUpperMargin(0.10000000000000001D); // BarRenderer3D renderer = new BarRenderer3D(); // DecimalFormat df = new DecimalFormat("0.00%"); // renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator( // "{2}", df)); // // renderer.setBaseItemLabelsVisible(true); // plot.setRenderer(renderer); // // ValueAxis rangeAxis = plot.getRangeAxis(); // //设置最高的一个 Item 与图片顶端的距离 // rangeAxis.setUpperMargin(0.15); // //设置最低的一个 Item 与图片底端的距离 // rangeAxis.setLowerMargin(0.15); // plot.setRangeAxis(rangeAxis); // // NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis(); // numberaxis.setNumberFormatOverride(NumberFormat.getPercentInstance()); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); if(this.width > 0 && this.height > 0) ChartUtilities.writeChartAsJPEG(byteArrayOutputStream, chart, this.width, this.height); else ChartUtilities.writeChartAsJPEG(byteArrayOutputStream, chart, 500, 300); String userDir = System.getProperty("user.dir"); StringBuilder sb = new StringBuilder(userDir); StringBuilder imageName = new StringBuilder(); imageName.append("excel/image/").append(this.title).append(System.currentTimeMillis()).append(".jpg"); sb.append("/html/").append(imageName); String imagePath = sb.toString(); FileOutputStream file = new FileOutputStream(imagePath); file.write(byteArrayOutputStream.toByteArray()); file.close(); return imageName.toString(); } }
Bar.java
最新推荐文章于 2021-02-16 02:09:38 发布