package edu.sjtu.infosec.ismp.manager.AM.comm; import java.awt.Font; import java.awt.Paint; import java.awt.RenderingHints; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.StandardChartTheme; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.CategoryItemLabelGenerator; 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.BarRenderer; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.renderer.category.DefaultCategoryItemRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.TextAnchor; /** * 资产管理模块可用性统计的柱状图 * * @author zjiajie * */ public class BarChart { /** * 创建柱状图 * * @param data为一组Integer的List * ,表示设备使用率; type为柱状图类型,1为日表,2为月表 * */ public static JFreeChart creatBarChart(List<Integer> data, int type) { String xLabel = null; switch (type) { // 日表 case (1): xLabel = "小时"; break; // 月表 case (2): xLabel = "天"; break; case (3): xLabel = "月"; break; } String yLabel = "使用率"; CategoryDataset dataset = getDataSet(data, type); JFreeChart chart = ChartFactory.createBarChart(null, // 图表标题 xLabel, // 目录轴的显示标签 yLabel, // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 false, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); //设置主题、解决乱码。 StandardChartTheme theme = new StandardChartTheme("unicode") { public void apply(JFreeChart chart) { chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); super.apply(chart); } }; theme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 20)); theme.setLargeFont(new Font("宋体", Font.PLAIN, 14)); theme.setRegularFont(new Font("宋体", Font.PLAIN, 12)); theme.setSmallFont(new Font("宋体", Font.PLAIN, 10)); ChartFactory.setChartTheme(theme); //主题结束 CategoryPlot plot = chart.getCategoryPlot(); plot.setRangeCrosshairVisible(true); BarRenderer renderer = new BarRenderer(); renderer.setBaseItemLabelsVisible(true); renderer .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER)); ValueAxis valueAxis = plot.getRangeAxis(); valueAxis.setLowerBound(0); valueAxis.setUpperBound(100); plot.setRenderer(renderer); return chart; } /** * 获取数据集对象 * * @return */ private static CategoryDataset getDataSet(List<Integer> data, int type) { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); switch (type) { // 日表 case (1): for (Integer i = 0; i < data.size(); i++) { dataset.addValue(data.get(i), "1", i); } break; // 月表 case (2): for (Integer i = 0; i < data.size(); i++) { dataset.addValue(data.get(i), "1", new Integer(i + 1)); } break; // 年报 case (3): for (Integer i = 0; i < data.size(); i++) { dataset.addValue(data.get(i), "1", new Integer(i + 1)); } } return dataset; } }