public class CategoryItemChart {
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供莘縣網(wǎng)站建設(shè)、莘縣做網(wǎng)站、莘縣網(wǎng)站設(shè)計、莘縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、莘縣企業(yè)網(wǎng)站模板建站服務(wù),十多年莘縣做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
public static String generateBarChart(HttpSession session, PrintWriter pw,int w, int h,ArrayList list) {
String filename = null;
try {
CategoryDataset dataset = createDataset(list);
JFreeChart chart = ChartFactory.createBarChart(
"",//圖表標(biāo)題
"",//X軸標(biāo)題
"",//Y軸標(biāo)題
dataset,//數(shù)據(jù)集合
PlotOrientation.VERTICAL,//圖表顯示方向(水平、垂直)
true,//是否使用圖例
true,//是否使用工具提示
false//是否為圖表增加URL
);
/*------------配置圖表屬性--------------*/
chart.setBackgroundPaint(Color.white); // 1,設(shè)置整個圖表背景顏色
CategoryPlot plot = chart.getCategoryPlot(); /*------------設(shè)定Plot參數(shù)-------------*/
plot.setBackgroundPaint(Color.white); // 2,設(shè)置詳細(xì)圖表的顯示細(xì)節(jié)部分的背景顏色
plot.setDomainGridlinePaint(Color.black); // 3,設(shè)置垂直網(wǎng)格線顏色
plot.setDomainGridlinesVisible(false); // 4,設(shè)置是否顯示垂直網(wǎng)格線
plot.setRangeGridlinePaint(Color.yellow); // 5,設(shè)置水平網(wǎng)格線顏色
plot.setRangeGridlinesVisible(false); //6,設(shè)置是否顯示水平網(wǎng)格線
/*---------將所有數(shù)據(jù)轉(zhuǎn)換為整數(shù)形式---------*/
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
/*---------設(shè)置是否在柱圖的狀態(tài)條上顯示邊框----*/
CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
BarRenderer render = (BarRenderer) plot.getRenderer();
// render.setItemMargin(0.0);
// render.setMinimumBarLength(0.0);
/*---------設(shè)置狀態(tài)條顏色的深淺漸變-----------*/
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, new Color(255,200, 80), 0.0f, 0.0f, new Color(255, 255, 40));
GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, new Color(50,255, 50), 0.0f, 0.0f, new Color(100, 255, 100));
GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f,0.0f, new Color(255, 100, 100));
GradientPaint gp3 = new GradientPaint(0.0f, 0.0f, new Color(108,108, 255), 0.0f, 0.0f, new Color(150, 150, 200));
renderer.setSeriesPaint(0, gp0);
renderer.setSeriesPaint(1, gp1);
renderer.setSeriesPaint(2, gp2);
renderer.setSeriesPaint(3, gp3);
/*
*
* 解決柱狀體與圖片邊框的間距問題
*
*
* */
/*------設(shè)置X軸標(biāo)題的傾斜程度----*/
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.E / 6.0));
/*------設(shè)置柱狀體與圖片邊框的左右間距--*/
domainAxis.setLowerMargin(0.06);
domainAxis.setUpperMargin(0.06);
/*------設(shè)置柱狀體與圖片邊框的上下間距---*/
ValueAxis rAxis = plot.getRangeAxis();
rAxis.setUpperMargin(0.3);
rAxis.setLowerMargin(0.3);
/*---------設(shè)置每一組柱狀體之間的間隔---------*/
render.setItemMargin(0.01);
/*
*
* 解決柱狀體與圖片邊框的間距問題
*
*
* */
/*
*
*
* 解決JFREECHART的中文顯示問題
*
*
* */
/*----------設(shè)置消除字體的鋸齒渲染(解決中文問題)--------------*/
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
/*----------設(shè)置標(biāo)題字體--------------------------*/
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑體", Font.PLAIN, 20));
/*------設(shè)置X軸坐標(biāo)上的文字-----------*/
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
/*------設(shè)置X軸的標(biāo)題文字------------*/
domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
/*------設(shè)置Y軸坐標(biāo)上的文字-----------*/
rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 14));
/*------設(shè)置Y軸的標(biāo)題文字------------*/
rAxis.setLabelFont(new Font("黑體", Font.PLAIN, 12));
/*---------設(shè)置柱狀體上的顯示的字體---------*/
renderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));
renderer.setBaseItemLabelGenerator(new LabelGenerator(0.0));
renderer.setBaseItemLabelsVisible(true);
/*
*
*
* 解決JFREECHART的中文顯示問題
*
*
* */
/*------得到chart的保存路徑----*/
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
/*------使用printWriter將文件寫出----*/
ChartUtilities.writeImageMap(pw, filename, info, true);
pw.flush();
} catch (Exception e) {
System.out.println("Exception - " + e.toString());
e.printStackTrace(System.out);
filename = "public_error_500x300.png";
}
return filename;
}
/*-------------設(shè)置柱狀體頂端的數(shù)據(jù)顯示--------------*/
static class LabelGenerator implements CategoryItemLabelGenerator {
private double threshold;
public LabelGenerator(double threshold) {
this.threshold = threshold;
}
public String generateLabel(CategoryDataset dataset, int row, int column) {
String result = null;
final Number value = dataset.getValue(row, column);
if (value != null) {
final double v = value.doubleValue();
if (v this.threshold) {
result = value.toString();
}
}
return result;
}
public String generateRowLabel(CategoryDataset dataset, int row) {
return null;
}
public String generateColumnLabel(CategoryDataset dataset, int column) {
return null;
}
}
/*-----------數(shù)據(jù)封裝-------------*/
private static CategoryDataset createDataset(ArrayList list) {
String s1 = "1";
String s2 = "2";
String c1 = "1";
String c2 = "2";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(44, s1, c1);
dataset.setValue(48, s2, c2);
return dataset;
}
}
比較完整的一個得到柱圖的代碼,保存路徑是臨時文件,怎么從數(shù)據(jù)庫取值應(yīng)該會吧。把dataset處理一下就可以了。
以下圖為例,引用下表中的數(shù)據(jù)在PPT中做柱狀圖
1、以2007版PPT為例,打開PPT,在左側(cè)幻燈片處單擊鼠標(biāo)右鍵,在彈出的右側(cè)菜單欄選擇“新建幻燈片”,如下圖。
2、新建幻燈片后點擊其中的“插入圖表”圖標(biāo),如下圖。
3、點擊“插入圖表”圖標(biāo)后在彈出的“插入圖表”對話框中選擇柱形圖樣式,然后單擊“確定”。
4、這時會自動跳轉(zhuǎn)到一個名為“Microsoft Office PowerPoint中的圖表”的EXCEL文件,我們只需將示例中的數(shù)據(jù)復(fù)制粘貼到選中區(qū)域內(nèi)。
5、如下圖復(fù)制粘貼后的數(shù)據(jù)表如下圖所示。
6、切換到PPT界面,我們可以看到,柱狀圖制作完成。
7、仔細(xì)觀察發(fā)現(xiàn)圖表中不包含表格中6月的數(shù)據(jù),這是只需切換到圖表的源數(shù)據(jù)表,觀察發(fā)現(xiàn)在5月列,F(xiàn)5單元格右下角有一個藍(lán)色的小圖標(biāo),表示的是數(shù)據(jù)區(qū)域到5月截止。
8、這時我們需要把藍(lán)色的小圖標(biāo)拖動到數(shù)據(jù)表最后一個單元格,即G5(數(shù)據(jù)表下方也有提示:若要調(diào)整圖表數(shù)據(jù)區(qū)域的大小,請拖拽區(qū)域的右下角)。
9、拖動完成后返回PPT查看圖表,如下圖,完成。
從數(shù)據(jù)庫中不是已經(jīng)返回數(shù)據(jù)了嗎,剩下的就是如何解析這些返回的數(shù)據(jù),然后用繪圖命令繪制出來了
Hello,大家好,工作中我們最常用到的圖表就是柱形圖,使用柱形圖展示數(shù)據(jù)更加的簡單直觀,能讓數(shù)據(jù)的對比更加的強(qiáng)烈。當(dāng)我們柱形圖使用的比較多的時候,容易給人一種千篇一律的感覺,會對數(shù)據(jù)的關(guān)注度大大降價,這個時候我們可以來制作一個三維柱形圖,三維柱形圖是一個立體的圖形,可以旋轉(zhuǎn),看起來感覺十分的高大上,他的制作也非常的簡單,下面就讓我們來一起操作下吧
僅需兩步制作高大上的柱形圖,讓老板眼前一亮,同事都夸你厲害
一、插入圖表
三維柱形圖的制作與普通柱形圖的制作是一模一樣的,首先我們點擊表格的任何一個單元格,然后點擊插入,找到推薦的圖表,緊接著點擊所有圖表,然后點擊柱形圖,選擇最后一個圖表類型:三維柱形圖,在下面會給出兩個圖表預(yù)覽的窗口,這個兩個主要是x軸與y軸的位置不一樣,大家可以根據(jù)自己數(shù)據(jù)的特性,選擇適合的展示類型即可,在這里我們選擇第一個,然后點擊確定
僅需兩步制作高大上的柱形圖,讓老板眼前一亮,同事都夸你厲害
二、設(shè)置俯瞰角度
三維柱形圖最難的一步就是設(shè)置俯瞰角度,因為三維柱形圖是立體的,在不同的角度觀看,數(shù)據(jù)會存在略微的差距,所以我們需要設(shè)置一下圖形的俯瞰角度,能讓我們一眼就能觀察到所有的數(shù)據(jù),首先我們點擊圖表然后按Ctrl+1調(diào)出格式窗口,然后在效果中找到三維格式我們找到三維旋轉(zhuǎn),分別調(diào)整x和y的角度就可以旋轉(zhuǎn)圖形了,因為每個圖形都是不盡相同的大家可以根據(jù)自己圖形的特點來旋轉(zhuǎn)圖形找到合適的觀看角度,跟大家分享一個小技巧:可以先旋轉(zhuǎn)x軸,當(dāng)感覺數(shù)據(jù)水平后略微調(diào)整下y軸即可
僅需兩步制作高大上的柱形圖,讓老板眼前一亮,同事都夸你厲害
以上就是我們設(shè)置三維柱形圖的方法,怎么樣,是不是非常簡單呢?
我是excel從零到一,關(guān)注我,持續(xù)分享更多excel技巧
專欄
查看
制作方法如下:
1、打開一份Excel數(shù)據(jù)表格后,選中表格中的數(shù)據(jù)內(nèi)容。
2、然后點擊上面的“插入”,點擊“全部圖表”。
3、選擇其中的“柱形圖”,點擊選擇一個自己喜歡的樣式。
4、這樣柱狀圖就制作完成了,接著再對柱狀圖的標(biāo)題、元素、顏色等進(jìn)行設(shè)置即可。