package com.langhua.bar; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.io.FileOutputStream; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.DefaultCategoryDataset; /** * 條狀測試 * @author Administrator * */ public class BarChar { private static final long serialVersionUID = 1L; public static void main(String[] args) { //創建數據 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); //數據初始化 dataset.addValue(1.0, "北京", "蘋果"); dataset.addValue(7.0, "北京", "香蕉"); dataset.addValue(-3.0, "北京", "桔子"); dataset.addValue(2.0, "上海", "蘋果"); dataset.addValue(3.0, "上海", "香蕉"); dataset.addValue(2.0, "上海", "桔子"); //創建 JFreeChart 對象 JFreeChart chart = ChartFactory.createBarChart("Bar Chart 例子","水果(X)", "價格(Y)", dataset,PlotOrientation.VERTICAL,true,true,false); //配置JFreeChart對象相關信息,如:字體大小,顏色,防止亂碼 BarChar.configFont(chart); //輸出 FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("c:\\Bar.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg,0.99f,chart,800,600, null); fos_jpg.close(); } catch (Exception e) { e.printStackTrace(); } } private static void configFont(JFreeChart chart) { //設置邊框寬度 chart.setBorderStroke(new BasicStroke(1)); //設置邊框是否可見 chart.setBorderVisible(true); //設置邊框著色 chart.setBorderPaint(Color.cyan); //設置背景顏色 //chart.setBackgroundPaint(Color.YELLOW); // 配置字體 Font xfont = new Font("宋體", Font.CENTER_BASELINE, 20);// X軸 Font yfont = new Font("宋體", Font.CENTER_BASELINE, 20);// Y軸 Font kfont = new Font("宋體", Font.CENTER_BASELINE, 18);// 底部 Font titleFont = new Font("微軟雅黑", Font.CENTER_BASELINE, 25); // 圖片標題 CategoryPlot plot = chart.getCategoryPlot();// 圖形的繪制結構對象 //數據軸網格線條顏色 plot.setRangeGridlinePaint(Color.BLUE); //數據軸網格線條筆觸 plot.setRangeGridlineStroke(new BasicStroke(1.0f)); // 圖片標題 chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont)); // 底部字體樣式,防止亂碼 chart.getLegend().setItemFont(kfont); //X軸 CategoryAxis domainAxis = plot.getDomainAxis(); //設置X軸標題字體 domainAxis.setLabelFont(xfont); //設置X軸字體 domainAxis.setTickLabelFont(xfont); //設置字體顏色 domainAxis.setTickLabelPaint(Color.BLUE); //橫軸上的label斜顯示 domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); //domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); //分類軸邊距,同種類型之間的距離 //這是分類之間的距離,和BAR與BAR之間的距離有差別 //domainAxis.setCategoryMargin(0.2f); //分類軸下(左)邊距,就是離左邊的距離 domainAxis.setLowerMargin(0.1); //分類軸下(右)邊距,就是離最右邊的距離 domainAxis.setUpperMargin(0.1); //Y 軸 ValueAxis rangeAxis = plot.getRangeAxis(); //設置Y軸標題字體 rangeAxis.setLabelFont(yfont); //設置Y軸字體 rangeAxis.setTickLabelFont(yfont); // 字體顏色 rangeAxis.setLabelPaint(Color.RED); //設置Bar的顏色 BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setSeriesPaint(0, Color.gray); renderer.setSeriesPaint(1, Color.orange); // 每個BAR之間的間隔 renderer.setItemMargin(0.0f); //每個BAR的最大寬度 //renderer.setMaximumBarWidth(0.5f); } }
亂碼解決的方法
1.重新設置標題的字體和內容
chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));
2.重新設置X軸標題字體和刻度字體
//設置X軸標題字體 domainAxis.setLabelFont(xfont); //設置X軸字體 domainAxis.setTickLabelFont(xfont);
3.重新設置Y軸標題字體和刻度字體
//設置Y軸標題字體 rangeAxis.setLabelFont(yfont); //設置Y軸字體 rangeAxis.setTickLabelFont(yfont);
4.設置圖象最下方,底部的字體
chart.getLegend().setItemFont(kfont);
Bar3D的創建和Bar大部分基本相同,但是創建的時候方法不同
JFreeChart chart = ChartFactory.createBarChart3D("Bar Chart 例子","水果(X)", "價格(Y)", dataset,PlotOrientation.VERTICAL,true,true,false);


更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
