JfreeChart做折線圖
package org.com.testJfreechart;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
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.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class TestJfreeChart3 {
//生成折線圖的寬高
private static final int width = 900;
private static final int height = 400;
//折線圖標題、橫座標、縱座標
private static final String title="利益演示圖";
private static final String xString="被保險人年齡";
private static final String yString="個人賬戶價值(萬元)";
private static final String Z_String="部分領取(元)";
//折線圖不同顏色線條所代表的含義 個人賬戶價值低中高 、部分領取
private static final String funderbalLow = "個人賬戶價值(低)";
private static final String funderbalMid = "個人賬戶價值(中)";
private static final String funderbalHig = "個人賬戶價值(高)";
private static final String getPart = "部分領取";
//字體顏色
private static final String blackBold ="黑體";
private static final String luShu ="隸書";
//輸出圖片png名稱及路徑
private static final String outFilePath ="D:/out_picture.png";
//折線圖 JfreeChart
private static JFreeChart creatChart(XYDataset dataset) {
//創建XYLineChart
JFreeChart chart=ChartFactory.createXYLineChart(title, xString, //X軸標籤
yString, //Y軸標籤
dataset, PlotOrientation.VERTICAL, true, false, false);
//使用XYPlot設置各種參數
XYPlot xyPlot=chart.getXYPlot();
//設置背景色透明度
xyPlot.setBackgroundAlpha(0.5f);
//設置前景色透明度
xyPlot.setForegroundAlpha(0.5f);
// 曲線圖
XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer)xyPlot.getRenderer();
//設置線條爲數據點
xyLineAndShapeRenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1,1.0F, new float[] { 1F, 6F }, 0.0F));
xyLineAndShapeRenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1,1.0F, new float[] { 1F, 6F }, 0.0F));
xyLineAndShapeRenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1,1.0F, new float[] { 1F, 6F }, 0.0F));
// 設置線顏色
// “個人賬戶價值”曲線的顏色: 曲線顏色 高 紫紅色RGB(156,0,88), 中 紅色 RGB(211,17,69), 低 藍色 RGB( 0, 115, 174) 以符合公司VI3.0
xyLineAndShapeRenderer.setSeriesPaint(0, new Color(0, 115, 174));
xyLineAndShapeRenderer.setSeriesPaint(1, new Color(211, 17, 69));
xyLineAndShapeRenderer.setSeriesPaint(2, new Color(156, 0, 88));
xyLineAndShapeRenderer.setSeriesPaint(3, new Color(30, 0, 88));//部分領取顏色
TextTitle textTitle=new TextTitle("",new Font(blackBold,Font.BOLD,12));
chart.addSubtitle(textTitle);
chart.setTitle(new TextTitle(title, new Font(luShu, Font.ITALIC, 15)));
chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0,1000,Color.BLUE));
//解決中文亂碼問題 ValueAxis爲橫座標 NumberAxis爲縱座標
Font font = new Font("SimSun", 10, 20);
NumberAxis rangeAxis = (NumberAxis) xyPlot.getRangeAxis();
rangeAxis.setLabelFont(font);
ValueAxis domainAxis = xyPlot.getDomainAxis();
domainAxis.setLabelFont(font);
//解決折線圖最下方的中文亂碼
chart.getLegend().setItemFont(font);
// 輸出文件到指定目錄
try {
ChartUtilities.saveChartAsPNG(new File(outFilePath), chart, width, height);
} catch (IOException exz) {
System.out.print("....Cant’t Create image File");
}
return chart;
}
private static XYDataset creatXYDataset(Object[] datas) {
//創建時間數據源
XYSeriesCollection xySeriesCollection=new XYSeriesCollection();
XYSeries xyLineSeries1 = new XYSeries(funderbalLow);
XYSeries xyLineSeries2 = new XYSeries(funderbalMid);
XYSeries xyLineSeries3 = new XYSeries(funderbalHig);
XYSeries xyBarSeries = new XYSeries(getPart);
Map<Integer,Double> map = new HashMap<Integer, Double>();
int mapLength = 0;
if(datas != null && datas.length>0){
map=(HashMap<Integer, Double>) datas[0];
if(map != null && map.size()>0){
mapLength = map.size();
for(int i=0,j=0;i<mapLength && j<datas.length;i++){
Map<Integer,Double> data = new HashMap<Integer, Double>();
data=(Map<Integer, Double>) datas[j];
if(j==0){
xyLineSeries1.add(i, data.get(i));//設置橫縱座標值
}else if(j==1){
xyLineSeries2.add(i, data.get(i));
}else if(j==2){
xyLineSeries3.add(i,data.get(i));
}else{
xyBarSeries.add(i, data.get(i));
}
if(i==mapLength-1){
j++;
i=-1;
}
}
}
}
xySeriesCollection.addSeries(xyLineSeries1);
xySeriesCollection.addSeries(xyLineSeries2);
xySeriesCollection.addSeries(xyLineSeries3);
xySeriesCollection.addSeries(xyBarSeries);
return xySeriesCollection;
}
//模擬填充數據 總共4中數據 key:橫座標 value:縱座標
public static Object[] getDatas(){
Object[] objects=new Object[4];
for(int i = 0;i<objects.length;i++){
Map<Integer,Double> map = new HashMap<Integer, Double>();
for(int j=0;j<15;j++){
map.put(j,Math.random());
}
objects[i]=map;
}
return objects;
}
public static void main(String[] args) {
//第一步,創建XYDataSet對象(接口) 準備數據
XYDataset dataset=creatXYDataset(getDatas());
//第二部,根據sataSet對象生成JfreeChart,並做相應設置
creatChart(dataset);
}
}
----------注:需要導入jar包。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
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.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class TestJfreeChart3 {
//生成折線圖的寬高
private static final int width = 900;
private static final int height = 400;
//折線圖標題、橫座標、縱座標
private static final String title="利益演示圖";
private static final String xString="被保險人年齡";
private static final String yString="個人賬戶價值(萬元)";
private static final String Z_String="部分領取(元)";
//折線圖不同顏色線條所代表的含義 個人賬戶價值低中高 、部分領取
private static final String funderbalLow = "個人賬戶價值(低)";
private static final String funderbalMid = "個人賬戶價值(中)";
private static final String funderbalHig = "個人賬戶價值(高)";
private static final String getPart = "部分領取";
//字體顏色
private static final String blackBold ="黑體";
private static final String luShu ="隸書";
//輸出圖片png名稱及路徑
private static final String outFilePath ="D:/out_picture.png";
//折線圖 JfreeChart
private static JFreeChart creatChart(XYDataset dataset) {
//創建XYLineChart
JFreeChart chart=ChartFactory.createXYLineChart(title, xString, //X軸標籤
yString, //Y軸標籤
dataset, PlotOrientation.VERTICAL, true, false, false);
//使用XYPlot設置各種參數
XYPlot xyPlot=chart.getXYPlot();
//設置背景色透明度
xyPlot.setBackgroundAlpha(0.5f);
//設置前景色透明度
xyPlot.setForegroundAlpha(0.5f);
// 曲線圖
XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer)xyPlot.getRenderer();
//設置線條爲數據點
xyLineAndShapeRenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1,1.0F, new float[] { 1F, 6F }, 0.0F));
xyLineAndShapeRenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1,1.0F, new float[] { 1F, 6F }, 0.0F));
xyLineAndShapeRenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1,1.0F, new float[] { 1F, 6F }, 0.0F));
// 設置線顏色
// “個人賬戶價值”曲線的顏色: 曲線顏色 高 紫紅色RGB(156,0,88), 中 紅色 RGB(211,17,69), 低 藍色 RGB( 0, 115, 174) 以符合公司VI3.0
xyLineAndShapeRenderer.setSeriesPaint(0, new Color(0, 115, 174));
xyLineAndShapeRenderer.setSeriesPaint(1, new Color(211, 17, 69));
xyLineAndShapeRenderer.setSeriesPaint(2, new Color(156, 0, 88));
xyLineAndShapeRenderer.setSeriesPaint(3, new Color(30, 0, 88));//部分領取顏色
TextTitle textTitle=new TextTitle("",new Font(blackBold,Font.BOLD,12));
chart.addSubtitle(textTitle);
chart.setTitle(new TextTitle(title, new Font(luShu, Font.ITALIC, 15)));
chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0,1000,Color.BLUE));
//解決中文亂碼問題 ValueAxis爲橫座標 NumberAxis爲縱座標
Font font = new Font("SimSun", 10, 20);
NumberAxis rangeAxis = (NumberAxis) xyPlot.getRangeAxis();
rangeAxis.setLabelFont(font);
ValueAxis domainAxis = xyPlot.getDomainAxis();
domainAxis.setLabelFont(font);
//解決折線圖最下方的中文亂碼
chart.getLegend().setItemFont(font);
// 輸出文件到指定目錄
try {
ChartUtilities.saveChartAsPNG(new File(outFilePath), chart, width, height);
} catch (IOException exz) {
System.out.print("....Cant’t Create image File");
}
return chart;
}
private static XYDataset creatXYDataset(Object[] datas) {
//創建時間數據源
XYSeriesCollection xySeriesCollection=new XYSeriesCollection();
XYSeries xyLineSeries1 = new XYSeries(funderbalLow);
XYSeries xyLineSeries2 = new XYSeries(funderbalMid);
XYSeries xyLineSeries3 = new XYSeries(funderbalHig);
XYSeries xyBarSeries = new XYSeries(getPart);
Map<Integer,Double> map = new HashMap<Integer, Double>();
int mapLength = 0;
if(datas != null && datas.length>0){
map=(HashMap<Integer, Double>) datas[0];
if(map != null && map.size()>0){
mapLength = map.size();
for(int i=0,j=0;i<mapLength && j<datas.length;i++){
Map<Integer,Double> data = new HashMap<Integer, Double>();
data=(Map<Integer, Double>) datas[j];
if(j==0){
xyLineSeries1.add(i, data.get(i));//設置橫縱座標值
}else if(j==1){
xyLineSeries2.add(i, data.get(i));
}else if(j==2){
xyLineSeries3.add(i,data.get(i));
}else{
xyBarSeries.add(i, data.get(i));
}
if(i==mapLength-1){
j++;
i=-1;
}
}
}
}
xySeriesCollection.addSeries(xyLineSeries1);
xySeriesCollection.addSeries(xyLineSeries2);
xySeriesCollection.addSeries(xyLineSeries3);
xySeriesCollection.addSeries(xyBarSeries);
return xySeriesCollection;
}
//模擬填充數據 總共4中數據 key:橫座標 value:縱座標
public static Object[] getDatas(){
Object[] objects=new Object[4];
for(int i = 0;i<objects.length;i++){
Map<Integer,Double> map = new HashMap<Integer, Double>();
for(int j=0;j<15;j++){
map.put(j,Math.random());
}
objects[i]=map;
}
return objects;
}
public static void main(String[] args) {
//第一步,創建XYDataSet對象(接口) 準備數據
XYDataset dataset=creatXYDataset(getDatas());
//第二部,根據sataSet對象生成JfreeChart,並做相應設置
creatChart(dataset);
}
}
----------注:需要導入jar包。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.