package com.xcx.spots.entity;
import java.awt.;
import java.io.File;
import java.util.;
import javax.imageio.ImageIO;
import com.xcx.spots.controller.api.JiffCDemo;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import java.util.List;
import java.util.Map.Entry;
public class BingUtils {
public static String createPort(String title, Map datas, Font font){
try {
//如果不使用Font,中文将显示不出来
DefaultPieDataset pds = new DefaultPieDataset();
//获取迭代器:
Set> set = datas.entrySet();
Iterator iterator=(Iterator) set.iterator();
Entry entry=null;
while(iterator.hasNext()){
entry=(Entry) iterator.next();
pds.setValue(entry.getKey().toString(),Double.parseDouble(entry.getValue().toString()));
}
/**
45 * 生成一个饼图的图表
46 *
47 * 分别是:显示图表的标题、需要提供对应图表的DateSet对象、是否显示图例、是否生成贴士以及是否生成URL链接
48 */
JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, true);
//设置图片标题的字体
chart.getTitle().setFont(font);
//得到图块,准备设置标签的字体
PiePlot plot = (PiePlot) chart.getPlot();
//设置分裂效果,需要指定分裂出去的key
plot.setExplodePercent("天使-彦", 0.1);
//设置标签字体
plot.setLabelFont(font);
//设置图例项目字体
chart.getLegend().setItemFont(font);
/**
66 * 设置开始角度(弧度计算)
67 *
68 * 度 0° 30° 45° 60° 90° 120° 135° 150° 180° 270° 360°
69 * 弧度 0 π/6 π/4 π/3 π/2 2π/3 3π/4 5π/6 π 3π/2 2π
70 */
plot.setStartAngle(new Float(3.14f / 2f));
//设置背景图片,设置最大的背景
Image img = ImageIO.read(new File("f:/test/1.jpg"));
chart.setBackgroundImage(img);
//设置plot的背景图片
img = ImageIO.read(new File("f:/test/2.jpg"));
plot.setBackgroundImage(img);
//设置plot的前景色透明度
plot.setForegroundAlpha(0.7f);
//设置plot的背景色透明度
plot.setBackgroundAlpha(0.0f);
//设置标签生成器(默认{0})
//{0}:key {1}:value {2}:百分比 {3}:sum
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}道题)/{2}"));
//将内存中的图片写到本地硬盘
UUID uuid = UUID.randomUUID();
ChartUtilities.saveChartAsJPEG(new File("C:/Users/nh/Documents/a/spots/src/main/resources/static/images/"+uuid+".png"), chart, 600, 300);
String s="C:/Users/nh/Documents/a/spots/src/main/resources/static/images/"+uuid+".png";
return s;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
Font font = new Font("新宋体", Font.BOLD, 15);
Map map=new HashMap();
map.put("A(优秀)", (double) 1000);
map.put("B(良好)", (double) 700);
map.put("C(及格)", (double) 600);
map.put("D(不及格)", (double) 400);
String s= BingUtils.createPort("超神学院女神投票结果", map, font);
System.out.println(s);
}
}
package com.xcx.spots.entity;
import org.apache.commons.lang.StringUtils;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import java.awt.;
import java.io.File;
import java.io.FileOutputStream;
/**
public class ZheUtils {
private String imgpath;
public String getImgpath() {
if(StringUtils.isEmpty(imgpath)){
return "C:\\Users\\nh\\Documents\\a\\spots\\src\\main\\resources\\static\\images\\";
}
return imgpath;
}
public void setImgpath(String imgpath) {
this.imgpath = imgpath;
}
/**
* 创建简单折线图
* @param rowKeys
* @param colKeys
* @param data
* @param charName
* @return
*/
public String createTimeXYCharSimple(String[] rowKeys, String[] colKeys, double[][] data, String charName){
CategoryDataset xyDataset = DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);
return createTimeXYChar("", "", "", xyDataset, charName, false, 0, 0, 1);
}
/**
* 创建简单折线图(设置刻度)
* @param rowKeys
* @param colKeys
* @param data
* @param charName
* @param min 刻度最小值
* @param max 刻度最大值
* @param size 刻度间隔
* @return
*/
public String createTimeXYCharSimpleSetBoundAndTick(String[] rowKeys, String[] colKeys, double[][] data, String charName, double min, double max, double size){
CategoryDataset xyDataset = DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);
return createTimeXYChar("", "", "", xyDataset, charName, true, min, max, size);
}
/**
* 折线图
*
* @param chartTitle
* @param x
* @param y
* @param xyDataset
* @param charName
* @param min 刻度最小值
* @param max 刻度最大值
* @param size 刻度间隔
* @return
*/
public String createTimeXYChar(String chartTitle, String x, String y, CategoryDataset xyDataset, String charName, boolean flag, double min, double max, double size) {
//ChartFactory.createLineChart3D创建3D折线图
JFreeChart chart = ChartFactory.createLineChart(chartTitle, //标题
x, //x轴标签
y, //y轴标签
xyDataset, //数据源
PlotOrientation.VERTICAL, //图表方向:水平、垂直
true, //是否显示图例(对于简单的柱状图必须是false)
true, //是否生成工具
false); //是否生成URL链接
//字体
Font titlefont = new Font("宋体", Font.BOLD, 25);
Font labelFont = new Font("宋体", Font.CENTER_BASELINE, 12);
chart.setTextAntiAlias(false);
// 设置背景色
chart.setBackgroundPaint(Color.WHITE);
// 重设标题
TextTitle title = new TextTitle(chartTitle);
title.setFont(titlefont);
chart.setTitle(title);
// 设置选项字体
chart.getLegend().setItemFont(labelFont);
//获取图表主体
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
// x轴
categoryplot.setDomainGridlinesVisible(true);//设置网格是否可见
categoryplot.setDomainGridlinePaint(Color.WHITE);// 虚线色彩
// y轴
categoryplot.setRangeGridlinesVisible(true);//设置网格是否可见
categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩
categoryplot.setBackgroundPaint(Color.lightGray);//图表背景色
// 设置轴和面板之间的距离
// categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
// x轴
CategoryAxis domainAxis = categoryplot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 轴标题字体
domainAxis.setTickLabelFont(labelFont);// 轴数值字体
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 轴标题45度倾斜
// y轴
ValueAxis valueAxis = categoryplot.getRangeAxis();
valueAxis.setLabelFont(labelFont);// 轴标题字体
if(flag){
valueAxis.setLowerBound(min);
valueAxis.setUpperBound(max);
}
NumberAxis numAxis = (NumberAxis) categoryplot.getRangeAxis();
numAxis.setTickUnit(new NumberTickUnit(size));//设置Y轴间隔
// 设置距离图片左端距离
domainAxis.setLowerMargin(0.0);
// 设置距离图片右端距离
domainAxis.setUpperMargin(0.0);
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberaxis.setAutoRangeIncludesZero(true);
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();
lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见
lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见
// 显示折点数据
lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lineandshaperenderer.setBaseItemLabelsVisible(false);
FileOutputStream fos_jpg = null;
try {
isChartPathExist(getImgpath());
String chartName = getImgpath() + charName;
fos_jpg = new FileOutputStream(chartName);
// 将报表保存为jpeg文件
ChartUtilities.writeChartAsJPEG(fos_jpg, chart, 600, 400);
return chartName;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 判断文件夹是否存在,如果不存在则新建
* @param chartPath
*/
public void isChartPathExist(String chartPath) {
File file = new File(chartPath);
if (!file.exists()) {
file.mkdirs();
}
}
public static void main(String[] args){
//可以设置y轴的刻度
ZheUtils chartUtil1 = new ZheUtils();
double[][] data1 = new double[][] {
{ 0, 0, 0, 0},{ 20, 30, 70, 80} };
String[] rowKeys1 = {"A","B" };
String[] colKeys1 = { "周测一", "周测二", "周测三", "周测四" };
String name= chartUtil1.createTimeXYCharSimpleSetBoundAndTick(rowKeys1, colKeys1, data1, "aa1.jpg", 0, 100, 5);
System.out.println(name);
}
}
]package com.xcx.spots.entity;
import java.awt.;
import java.io.File;
import java.util.;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import sun.plugin.util.UIUtil;
import java.util.List;
import java.util.Map.Entry;
/**
public class ZhuUtils {
/**
* 提供静态方法:获取报表图形2:柱状图
* @param title 标题
* @param datas 数据
* @param type 分类(第一季,第二季.....)
* @param danwei 柱状图的数量单位
* @param font 字体
*/
public static String createPort(String title, Map> datas, String type, String danwei, Font font){
try {
//种类数据集
DefaultCategoryDataset ds = new DefaultCategoryDataset();
//获取迭代器:
Set>> set1 = datas.entrySet(); //总数据
Iterator iterator1=(Iterator) set1.iterator(); //第一次迭代
Iterator iterator2=null;
HashMap map = null;
Set> set2=null;
Map.Entry entry1=null;
Map.Entry entry2=null;
while(iterator1.hasNext()){
entry1=(Map.Entry) iterator1.next(); //遍历分类
map=(HashMap) entry1.getValue();//得到每次分类的详细信息
set2=map.entrySet(); //获取键值对集合
iterator2=set2.iterator(); //再次迭代遍历
while (iterator2.hasNext()) {
entry2= (Map.Entry) iterator2.next();
ds.setValue(Double.parseDouble(entry2.getValue().toString()),//每次统计数量
entry2.getKey().toString(), //名称
entry1.getKey().toString()); //分类
System.out.println("当前:--- "+entry2.getKey().toString()+"--"
+entry2.getValue().toString()+"--"
+entry1.getKey().toString());
}
System.out.println("-------------------------------------");
}
//创建柱状图,柱状图分水平显示和垂直显示两种//
JFreeChart chart = ChartFactory.createBarChart(title, type, danwei, ds, PlotOrientation.VERTICAL, true, true, true);
//设置整个图片的标题字体
chart.getTitle().setFont(font);
//设置提示条字体
font = new Font("宋体", Font.BOLD, 15);
chart.getLegend().setItemFont(font);
//得到绘图区
CategoryPlot plot = chart.getCategoryPlot();//
//得到绘图区的域轴(横轴),设置标签的字体
plot.getDomainAxis().setLabelFont(font);
Color c = new Color(36,63,110);
plot.getRenderer().setSeriesPaint(0,c) ;//设置第一个柱子的颜色
plot.getRenderer().setSeriesPaint(1,new Color(0,128,11)) ;
//设置横轴标签项字体
plot.getDomainAxis().setTickLabelFont(font);
//设置范围轴(纵轴)字体
plot.getRangeAxis().setLabelFont(font);
//存储成图片
//设置chart的背景图片
chart.setBackgroundImage(ImageIO.read(new File("f:/test/1.jpg")));
plot.setBackgroundImage(ImageIO.read(new File("f:/test/2.jpg")));
plot.setForegroundAlpha(1.0f);
UUID uuid = UUID.randomUUID();
ChartUtilities.saveChartAsJPEG(new File("C:/Users/nh/Documents/a/spots/src/main/resources/static/images/"+uuid+".png"), chart, 600, 400);
String s ="C:/Users/nh/Documents/a/spots/src/main/resources/static/images/"+uuid+".png";
return s;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
Map> datas =new HashMap>();
Map map1=new HashMap();
Map map2=new HashMap();
Map map3=new HashMap();
Map map4=new HashMap();
//设置第一期的投票信息
map1.put("天使-彦", (double) 600);
map1.put("雄兵连-蔷薇", (double) 700);
//设置第二期的投票信息
map2.put("天使-彦", (double) 1300);
map2.put("雄兵连-蔷薇", (double) 900);
//设置第三期的投票信息
map3.put("天使-彦", (double) 2000);
map3.put("雄兵连-蔷薇", (double) 1700);
//设置第四期的投票信息
map4.put("天使-彦", (double) 3000);
map4.put("雄兵连-蔷薇", (double) 2500);
//压入数据
datas.put("第一季", map1);
datas.put("第二季", map2);
datas.put("第三季-神与神", map3);
// datas.put("第四季-黑甲", map4);
Font font = new Font("宋体", Font.BOLD, 20);
ZhuUtils.createPort("均分差",datas,"学生","单位(分)",font);
}
}
package com.xcx.spots.entity;
import java.awt.;
import java.io.File;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import sun.plugin.util.UIUtil;
import java.util.List;
import java.util.Map.Entry;
public class SZUtils {
/**
* 提供静态方法:获取报表图形2:柱状图
* @param title 标题
* @param datas 数据
* @param type 分类(第一季,第二季.....)
* @param danwei 柱状图的数量单位
* @param font 字体
*/
public static String createPort(String title,Map> datas,String type,String danwei,Font font){
try {
//种类数据集
DefaultCategoryDataset ds = new DefaultCategoryDataset();
//获取迭代器:
Set>> set1 = datas.entrySet(); //总数据
Iterator iterator1=(Iterator) set1.iterator(); //第一次迭代
Iterator iterator2=null;
HashMap map = null;
Set> set2=null;
Entry entry1=null;
Entry entry2=null;
while(iterator1.hasNext()){
entry1=(Entry) iterator1.next(); //遍历分类
map=(HashMap) entry1.getValue();//得到每次分类的详细信息
set2=map.entrySet(); //获取键值对集合
iterator2=set2.iterator(); //再次迭代遍历
while (iterator2.hasNext()) {
entry2= (Entry) iterator2.next();
ds.setValue(Double.parseDouble(entry2.getValue().toString()),//每次统计数量
entry2.getKey().toString(), //名称
entry1.getKey().toString()); //分类
System.out.println("当前:--- "+entry2.getKey().toString()+"--"
+entry2.getValue().toString()+"--"
+entry1.getKey().toString());
}
System.out.println("-------------------------------------");
}
//创建柱状图,柱状图分水平显示和垂直显示两种
JFreeChart chart = ChartFactory.createBarChart(title, type, danwei, ds, PlotOrientation.VERTICAL, true, true, true);
//设置整个图片的标题字体
chart.getTitle().setFont(font);
//设置提示条字体
font = new Font("宋体", Font.BOLD, 15);
chart.getLegend().setItemFont(font);
//得到绘图区
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//得到绘图区的域轴(横轴),设置标签的字体
plot.getDomainAxis().setLabelFont(font);
Color c = new Color(36,63,110);
plot.getRenderer().setSeriesPaint(0,c) ;//设置第一个柱子的颜色
plot.getRenderer().setSeriesPaint(1,new Color(0,128,11)) ;//第二个柱子颜色
//Y轴刻度为整数从0开始
NumberAxis localNumberAxis = (NumberAxis)plot.getRangeAxis();
localNumberAxis.setNumberFormatOverride(NumberFormat.getNumberInstance());
localNumberAxis.setUpperMargin(1);
//设置横轴标签项字体
plot.getDomainAxis().setTickLabelFont(font);
CategoryPlot plotBar = chart.getCategoryPlot();
NumberAxis na= (NumberAxis)plotBar.getRangeAxis();
na.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
//设置范围轴(纵轴)字体
plot.getRangeAxis().setLabelFont(font);
//存储成图片
//设置chart的背景图片
chart.setBackgroundImage(ImageIO.read(new File("f:/test/1.jpg")));
plot.setBackgroundImage(ImageIO.read(new File("f:/test/2.jpg")));
plot.setForegroundAlpha(1.0f);
UUID uuid = UUID.randomUUID();
ChartUtilities.saveChartAsJPEG(new File("C:/Users/nh/Documents/a/spots/src/main/resources/static/images/"+uuid+".png"), chart, 600, 400);
String s ="C:/Users/nh/Documents/a/spots/src/main/resources/static/images/"+uuid+".png";
return s;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
Map> datas =new HashMap>();
Map map1=new HashMap();
Map map2=new HashMap();
Map map3=new HashMap();
Map map4=new HashMap();
//设置第一期的投票信息
map1.put("天使-彦", (double) 40);
map1.put("雄兵连-蔷薇", (double) 12);
//设置第二期的投票信息
map2.put("天使-彦", (double) 70);
map2.put("雄兵连-蔷薇", (double) 50);
//设置第三期的投票信息
map3.put("天使-彦", (double) 20);
map3.put("雄兵连-蔷薇", (double) 10);
//设置第四期的投票信息
map4.put("天使-彦", (double) 30);
map4.put("雄兵连-蔷薇", (double) 20);
//压入数据
datas.put("第一季", map1);
datas.put("第二季", map2);
datas.put("第三季", map3);
datas.put("第四季", map4);
Font font = new Font("宋体", Font.BOLD, 20);
SZUtils.createPort("超神学院前四季最受欢迎的女性角色投票结果",datas,"超神纪元","百分比(%)",font);
}
}