Browse Source

添加jfreechart测试代码

zhongwei
Jone 1 year ago
parent
commit
847cdeb15a
  1. 236
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/data/controller/BarChartDemo.java
  2. 36
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/data/controller/CustomRenderer.java

236
hzims-service/operational/src/main/java/com/hnac/hzims/operational/data/controller/BarChartDemo.java

@ -0,0 +1,236 @@
package com.hnac.hzims.operational.data.controller;
import java.awt.*;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import com.hnac.hzims.operational.report.vo.TicketChartCell;
import com.hnac.hzims.operational.report.vo.TicketChartVo;
import com.hnac.hzims.ticket.constants.TicketConstants;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtils;
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.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.StandardBarPainter;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class BarChartDemo {
// public static void main(String[] args) {
// // 1. 得到数据
// CategoryDataset dataset = getDataSetTicket();
//// CategoryDataset dataset = getDataSet();
//// CategoryDataset dataset = getDataSet3();
// // 2. 构造chart
// JFreeChart chart = ChartFactory.createBarChart(
// "水果产量图", // 图表标题
// "水果", // 目录轴的显示标签--横轴
// "产量", // 数值轴的显示标签--纵轴
// dataset, // 数据集
// PlotOrientation.VERTICAL, // 图表方向:水平、
// true, // 是否显示图例(对于简单的柱状图必须
// false, // 是否生成工具
// false // 是否生成URL链接
// );
// // 3. 处理chart中文显示问题
// iSetBarChart(chart);
//
// // 4. chart输出图片
//// writeChartAsImage(chart, "fruit.jpg");
// writeChartAsImage(chart, "ticket.jpg");
//
//// writeChartAsImage(chart, "fruit2.jpg");
//
// // 5. chart 以swing形式输出
// ChartFrame pieFrame = new ChartFrame("水果生产", chart);
// pieFrame.pack();
// pieFrame.setVisible(true);
//
// }
/**
* 获取一个演示用的组合数据集对象
*
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(120, "上海", "苹果");
dataset.addValue(160, "广州", "苹果");
dataset.addValue(210, "北京", "梨子");
dataset.addValue(220, "上海", "梨子");
dataset.addValue(230, "广州", "梨子");
dataset.addValue(330, "北京", "葡萄");
dataset.addValue(340, "上海", "葡萄");
dataset.addValue(340, "广州", "葡萄");
dataset.addValue(420, "北京", "香蕉");
dataset.addValue(430, "上海", "香蕉");
dataset.addValue(400, "广州", "香蕉");
dataset.addValue(510, "北京", "荔枝");
dataset.addValue(530, "上海", "荔枝");
dataset.addValue(510, "广州", "荔枝");
return dataset;
}
private static CategoryDataset getDataSet3() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(210, "北京", "梨子");
dataset.addValue(330, "北京", "葡萄");
dataset.addValue(420, "北京", "香蕉");
dataset.addValue(510, "北京", "荔枝");
return dataset;
}
private static CategoryDataset getDataSetTicket() {
List<TicketChartVo> ticketList = new ArrayList<>();
TicketConstants.TicketTypeNameEnum[] values = TicketConstants.TicketTypeNameEnum.values();
TicketChartVo sum=new TicketChartVo();
List<TicketChartCell> sas = new ArrayList<>();
sum.setDeptName("总计");
for (TicketConstants.TicketTypeNameEnum value : values) {
TicketChartCell ticketChartCell = new TicketChartCell();
ticketChartCell.setTicketType(value.getType());
ticketChartCell.setTicketName(value.getFileName());
Integer integer = Integer.valueOf(value.getType());
ticketChartCell.setTicketMon(30+ integer);
BigDecimal d=BigDecimal.valueOf(integer).divide(BigDecimal.valueOf(100),2,BigDecimal.ROUND_UP);
ticketChartCell.setTicketMonPerc(0.3+ d.doubleValue());
sas.add(ticketChartCell);
}
sum.setChartCells(sas);
ticketList.add(sum);
//两票柱状图数据
// 创建数据
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// for (TicketChartVo chartVo : ticketList) {
// for (int i = 0; i < chartVo.getChartCells().size(); i++) {
// TicketChartCell ticketChartCell = chartVo.getChartCells().get(i);
// dataset.addValue(ticketChartCell.getTicketMon(), ticketChartCell.getTicketName(), ticketChartCell.getTicketName());
// }
// }
dataset.addValue(33+1, "", "倒闸操作票");
dataset.addValue(33+2,"", "开机操作票");
dataset.addValue(33+3,"", "停机操作票");
dataset.addValue(33+4,"", "第一种工作票");
dataset.addValue(33+5,"", "第二种工作票");
dataset.addValue(33+6,"", "水力机械票");
return dataset;
}
/**
* 解决图表汉字显示问题
*
* @param chart
*/
private static void processChart(JFreeChart chart) {
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
ValueAxis rAxis = plot.getRangeAxis();
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
rAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
// renderer.setItemLabelGenerator(new LabelGenerator(0.0));
// renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
// renderer.setItemLabelsVisible(true);
}
/**
* 输出图片
*
* @param chart
*/
private static void writeChartAsImage(JFreeChart chart, String fileName) {
FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\test\\"+fileName);
ChartUtils.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300, null);
// ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300, null);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
}
}
}
public static void iSetBarChart(JFreeChart chart) {
CategoryPlot categoryplot = chart.getCategoryPlot();// 图本身
ValueAxis rangeAxis = categoryplot.getRangeAxis();
CategoryAxis domainAxis = categoryplot.getDomainAxis();
// 设置Y轴的提示文字样式
rangeAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
// 设置Y轴刻度线的长度
rangeAxis.setTickMarkInsideLength(10f);
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); // 横轴上的
domainAxis.setLowerMargin(0.1);
domainAxis.setUpperMargin(0.1);
// rangeAxis.setTickMarkOutsideLength(10f);
// 设置X轴下的标签文字
domainAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
// 设置X轴上提示文字样式
domainAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
NumberAxis vn = (NumberAxis) categoryplot.getRangeAxis();
// 设置Y轴的数字为百分比样式显示设置Y轴的数字为百分比样式显示
DecimalFormat df = new DecimalFormat("0.0");
vn.setNumberFormatOverride(df);
// 使柱状图反过来显示
// vn.setInverted(true);
// vn.setVerticalTickLabels(true);
// 自定义柱状图中柱子的样式
CustomRenderer brender = new CustomRenderer();
// 设置柱状图的顶端显示数字
brender.setIncludeBaseInRange(true);
brender.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator());
brender.setDefaultItemLabelsVisible(true);
// 设置柱子为平面图不是立体的
brender.setBarPainter(new StandardBarPainter());
// 设置柱状图之间的距离0.1代表10%;
brender.setItemMargin(0.3);
// 设置柱子的阴影,false代表没有阴影
brender.setShadowVisible(false);
// 设置图的背景为白色
categoryplot.setBackgroundPaint(Color.WHITE);
// 设置背景虚线的颜色
categoryplot.setRangeGridlinePaint(Color.decode("#B6A2DE"));
// 去掉柱状图的背景边框,使边框不可见
categoryplot.setOutlineVisible(false);
// 设置标题的字体样式
chart.getTitle().setFont(new Font("微软雅黑", Font.PLAIN, 24));
// 设置图表下方图例上的字体样式
chart.getLegend().setItemFont(new Font("微软雅黑", Font.PLAIN, 12));
categoryplot.setRenderer(brender);
}
}

36
hzims-service/operational/src/main/java/com/hnac/hzims/operational/data/controller/CustomRenderer.java

@ -0,0 +1,36 @@
package com.hnac.hzims.operational.data.controller;
import lombok.Data;
import java.awt.*;
/**
* 类描述: 重写BarRenderer类
*
* @author Jack_Liberty
* @version 1.0
* @date 2021-04-01 11:30
*/
@Data
public class CustomRenderer extends org.jfree.chart.renderer.category.BarRenderer {
/**
* 柱子颜色
*/
private Paint[] colors;
public CustomRenderer() {
/**
* 初始化柱子颜色
*/
String[] colorValues = {"#C0504D", "#E46C0A", "#4F81BD", "#00B050", "#7030A0", "#00BF00"};
colors = new Paint[colorValues.length];
for (int i = 0; i < colorValues.length; i++) {
colors[i] = Color.decode(colorValues[i]);
}
}
@Override
public Paint getItemPaint(int i, int j) {
return colors[j % colors.length];
}
}
Loading…
Cancel
Save