jfreechart 柱狀圖與折線圖結合

導入必須的兩個jar包jcommon-1.0.16.jar、jfreechart-1.0.13.jar

web.xml里加入

 <servlet>
    <servlet-name>DisplayChart</servlet-name>
    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DisplayChart</servlet-name>
    <url-pattern>/servlet/DisplayChart</url-pattern>
  </servlet-mapping>

·····························································································································································

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;


import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;


/*
 * 繪製柱狀圖
 * */
public class BarChart3DDemo {
public static void main(String[] args) {
try {
// 設置主題
StandardChartTheme standardChartTheme = new StandardChartTheme("name");//這裏的"name"參數;是什麼意思我也不知道,反正這樣可以用
standardChartTheme.setLargeFont(new Font("楷體",Font.BOLD, 12));//可以改變軸向的字體
standardChartTheme.setRegularFont(new Font("宋體",Font.BOLD, 12));//可以改變圖例的字體
standardChartTheme.setExtraLargeFont(new Font("隸書",Font.BOLD, 12));//可以改變圖標的標題字體
ChartFactory.setChartTheme(standardChartTheme);//Theme.getTheme()
// 構造數據
DefaultCategoryDataset dataset = new DefaultCategoryDataset();//柱狀圖數據
DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();//折線圖數據
dataset.addValue(100, "公司本部面積", "北京");
dataset.addValue(700, "公司本部面積", "田徑");
dataset.addValue(300, "公司本部面積", "蘇州");
dataset.addValue(400, "公司本部面積", "杭州");
dataset.addValue(500, "公司本部面積", "大連");
dataset.addValue(600, "公司本部面積", "合肥");

lineDataset.addValue(100, "出售資產", "北京");
lineDataset.addValue(200, "出售資產", "田徑");
lineDataset.addValue(600, "出售資產", "蘇州");
lineDataset.addValue(400, "出售資產", "杭州");
lineDataset.addValue(700, "出售資產", "大連");
lineDataset.addValue(600, "出售資產", "合肥");



JFreeChart chart = ChartFactory.createBarChart("編程語言統計",
     "語言",// 目錄軸的顯示標籤
     "學習人數", // 數值軸的顯示標籤
     dataset,// 數據集
     PlotOrientation.VERTICAL,// 圖表方向:水平、垂直
     true,// 是否顯示圖例(對於簡單的柱狀圖必須是false)
     true,//是否生成工具
     false);// 是否生成URL鏈接
chart.getTitle().setFont(new Font("隸書", Font.BOLD, 26));//設置title標題
chart.setBackgroundPaint(new Color(238, 238, 255));//設置背景色
chart.getLegend().setItemFont(new Font("隸書", Font.BOLD, 18));// 底部

CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();//圖本身
categoryplot.setDataset(1, lineDataset);//放折線圖數據
   LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
   lineandshaperenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
   categoryplot.setRenderer(1, lineandshaperenderer);
       
ValueAxis valueAxis = categoryplot.getRangeAxis();
   valueAxis.setLabelFont(new Font("黑體", Font.ITALIC, 18)); // 設置數據字體(縱軸)
   CategoryAxis categoryaxis = categoryplot.getDomainAxis();
   categoryaxis.setLabelFont(new Font("黑體", Font.ITALIC, 18)); // 設置時字體(橫軸)
   categoryaxis.setLowerMargin(0.0); // 柱狀圖和縱軸緊靠
   
   categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
   categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);//折線在柱面前面顯示

ChartUtilities.saveChartAsPNG(new File("D:/BarChart3D.png"),
chart, 800, 500);
System.out.println("繪圖完成");
} catch (IOException e) {
e.printStackTrace();
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章