jfreechart資料庫
A. 如何使用JFreechart實現將從資料庫中查出的相關記錄,生成柱狀圖或餅狀圖
這個普通的三層結構沒有實質區別
就是把要顯示在jsp頁面內的數據 替換成了JFreechart的api流圖
B. jfreechart柱形圖如何從mysql資料庫中添加到數據集中
圖顯IP:
只要從資料庫中讀取數據出來,然後循環記錄,把數據填入jfreechart中的數據集就可以啦!
ds = this.getDataSource(request,"ds");
conn = ds.getConnection();
ReportInfoBean infoBean = CommonUtil.getReportInfo(conn, SysConfig.REPORT_TYPE_LIVEDENSITY);
String sqlParam = "";
if(sels == null || sels.equals("")){
sqlParam = infoBean.getControlCamIDs();
}else{
sqlParam = sels;
}
url = SysConfig.WEB_APPNAME_PATH+"reportLiveDensityAction.do?method=toSearchRecord&begintime="+beginTime+"&endtime="+endTime+"&sels="+sels;
projectName = infoBean.getProjectName();
dataOper.setCon(conn);
String sql = "exec Sp_PeopleDensity '"
+userInfo.getUserID()+"'," //用戶ID
+"'','"//工程ID
+beginTime+"','"//開始日期
+endTime+"','"//結束日期
+"00:"+infoBean.getXinterval()+":00"+"',"//時間間隔
+infoBean.getMultiple()+","//倍數
+"0"+","//0表示所有出入口,1表示部分出入口(此參數在該存儲過程中暫無用)
+infoBean.getAlarmNum()+","//警戒線
+"'"+sqlParam+"'";//鏡頭號
System.out.println("sql="+sql);
ReportChartFactory factory = new ReportChartFactory();
List list = dataOper.queryToList(sql);
factory.generateLiveDensityMap(list);
JFreeChart jfreechart = factory.createLiveDensityChart(factory.createLiveDensityDataset(list,confBean),infoBean,confBean);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
ChartUtilities.saveChartAsJPEG(new File(filePath+fileName),jfreechart,width,height,info);//寬1000,高600
useMapStr = ChartUtilities.getImageMap(fileName,info);
useMapStr = factory.replaceImageMap(useMapStr);
C. java中 jfreechart 如何從資料庫中讀取數據,顯示的時候作為一個動態的曲線圖展示出來,這個要如何實現
jfreechart有獲取後台的數據源屬性,你後台將數據查詢出來就可以了。關於曲線圖的生成jfreechart肯定有自動封裝的!調用就可以。
D. 關於JFreeChart的幾點問題
1.jfreechart-1.0.11-demo.jar只是實例,裡面都是class文件,我當初是全部反編譯之後再看這些例子的,例子很多;
2.真正需要添加的jar包是jfreechart-1.0.10.jar和jcommon-1.0.13.jar,抱歉我用的是10的,所以名稱與你的11不一樣
3.餅圖例子
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleInsets;
public class FirstTest{
public static void main(String[] args){
// 第一步創建數據集
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("類別1", 125.3);
dataset.setValue("類別2", 52.7);
dataset.setValue("類別3", 10.6);
dataset.setValue("類別4", 85.96);
dataset.setValue("類別5", 43.2);
// 第二步創建一個JFreeChart對象
JFreeChart chart1 = ChartFactory.createPieChart(
"第一個餅圖",
dataset, true, // 是否有圖注
true, // 是否有提示
false // 是否有URLS
);
// 第三步讓它顯示
ChartFrame frame = new ChartFrame("test", chart1);
frame.setBounds(500, 200, 200, 200);
frame.pack();
frame.setVisible(true);
PiePlot3D plot =new PiePlot3D(dataset);
plot.setDepthFactor(0.10);
plot.setShadowPaint(null);
plot.setInsets(new RectangleInsets(100, 150, 100, 150));
// 設置餅圖的起始角度
plot.setStartAngle(45);
plot.setForegroundAlpha(0.8f);
plot.setBackgroundAlpha(0.9f);
JFreeChart chart = new JFreeChart("hffirst", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(java.awt.Color.white);
ChartFrame frame1 = new ChartFrame("test1", chart);
frame1.setBounds(0, 0, 300, 300);
frame1.pack();
frame1.setVisible(true);
}
}
這個實際上會生成兩個餅圖,一個是二維的,一個三維的,有注釋,可以參考
再說一下,demo包裡面的東西真的很多,你可以反編譯看源代碼
E. 如何根據資料庫生成jfreechart圖表
jfreechart 才不管你數據從哪來呢,jfreechart 也不提供資料庫介面,你只需要按照 jfreechart 的要求提供數據即可。
F. Eclipse中JFreechart怎麼隨著後台資料庫更新而更新
<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> web.xml這樣配置就行了
G. 如何用jfreechart顯示餅狀圖,數據來自我的資料庫當中。求具體代碼
/*
*生成3D餅狀圖
*/
(Stringtitle,
List<TimeSeriesDataBean>list){
FontCtl.setFont();//解決亂碼問題
List<String[]>dataList=newArrayList<String[]>();
String[]ss;
for(TimeSeriesDataBeanbean:list){
ss=newString[2];
ss[0]=bean.getNam();
ss[1]=bean.getVal()+"";
dataList.add(ss);
}
DefaultPieDatasetdataset=DataSetBuilder.buildPieChartDataSet(title,
dataList);
JFreeChartchart=ChartFactory.createPieChart3D(title,dataset,true,
true,false);
//chart.addSubtitle(newTextTitle("SUBTITLE測試"));
PiePlotpieplot=(PiePlot)chart.getPlot();
//{0}:({1})%代表顯示格式:0=名稱1=值比如:名稱:19%
=(
"{0}:({1})",NumberFormat.getNumberInstance(),NumberFormat
.getPercentInstance());
pieplot.setLabelGenerator(standarPieIG);
//沒有數據的時候顯示的內容
pieplot.setNoDataMessage("無數據顯示");
pieplot.setLabelGap(0.02D);
PiePlot3Dpieplot3d=(PiePlot3D)chart.getPlot();
//設置開始角度
pieplot3d.setStartAngle(120D);
//設置方向為」順時針方向「
pieplot3d.setDirection(Rotation.CLOCKWISE);
//設置透明度,0.5F為半透明,1為不透明,0為全透明
pieplot3d.setForegroundAlpha(0.7F);
ChartFrameframe=newChartFrame(title,chart);
frame.pack();
frame.setVisible(true);
returnchart;
}
H. jsp頁面 jfreechart調用資料庫中的數據並以柱狀圖的形式顯現出來
我把核心代碼給你,你一定要看懂這個代碼,否則還是寫不出的,注釋我都標的很詳細了。前幾行是我的方法,作用的返回所有課程,你知道意思就行,因為不一定要這樣寫,你採用你的方式遍歷一邊資料庫表項並循環插入到dataset就行,其實很簡單的~
<%
CourseDAO = new CourseDAO();//類
ArrayList<Courseinfo> list = (ArrayList<Courseinfo>) .allCourses();//這個方法是返回所有的課程
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < list.size(); i++) { //遍歷所有課程,把內容依次添加到dataset里
dataset.addValue(list.get(i).getCoursenum(), "totalnum", list.get(i).getCoursename());
}
JFreeChart freechart = ChartFactory.createBarChart3D("選課信息統計圖",
"課程名稱", "選課人數", dataset, PlotOrientation.VERTICAL, true,true, true);
freechart.setBackgroundPaint(Color.LIGHT_GRAY);
freechart.getTitle().setPaint(Color.BLUE);
freechart.getLegend().setVisible(true);
Font font = new Font("SimSun", 10, 20);
TextTitle txtTitle = null;
txtTitle = freechart.getTitle();
txtTitle.setFont(font);
CategoryPlot plot = freechart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
//設置距離圖片左端距離
domainAxis.setLowerMargin(0.02);
//設置距離圖片右端距離
domainAxis.setUpperMargin(0.02);
domainAxis.setLabelFont(new Font("黑體", Font.PLAIN, 14));
//水平底部標題
domainAxis.setTickLabelFont(new Font("宋體", Font.PLAIN, 14));
//垂直標題
ValueAxis rangeAxis = plot.getRangeAxis();//獲取柱狀
rangeAxis.setLabelFont(new Font("黑體", Font.PLAIN, 14));
plot.setDomainAxis(domainAxis);
//2
rangeAxis.setUpperMargin(0.08);
//設置最低的一個柱與圖片底端的距離
rangeAxis.setLowerMargin(0.24);
plot.setRangeAxis(rangeAxis);
//3
BarRenderer3D bar = new BarRenderer3D();
bar.setBaseOutlinePaint(Color.BLACK);
//設置 Wall 的顏色
bar.setWallPaint(Color.darkGray);
//設置每種代表的柱的顏色
bar.setSeriesPaint(0, new Color(255, 0, 0));
bar.setSeriesPaint(1, new Color(0, 255, 0));
bar.setSeriesPaint(2, Color.BLUE);
//設置每種代表的柱的 Outline 顏色
bar.setSeriesOutlinePaint(0, Color.BLACK);
bar.setSeriesOutlinePaint(1, Color.BLACK);
bar.setSeriesOutlinePaint(2, Color.BLACK);
//設置平行柱的之間距離
bar.setItemMargin(0.02);
//顯示每個柱的數值,並修改該數值的字體屬性
bar.setItemLabelGenerator(new ());
bar.setDrawBarOutline(true);
bar.setIncludeBaseInRange(true);
bar.setItemLabelFont(new Font("華文新魏", Font.PLAIN, 8));
bar.setItemLabelsVisible(true);
plot.setRenderer(bar);
BarRenderer3D renderer = (BarRenderer3D) plot.getRenderer();
renderer.setWallPaint(Color.PINK);
plot.setForegroundAlpha(1.00f);
//注意:此句很關鍵,若無此句,那數字的顯示會被覆蓋,給人數字沒有顯示出來的問題
renderer.(new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D);
GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F,
Color.blue, 0.0F, 0.0F, new Color(0, 0, 64)); //設定特定顏色
GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F,
Color.cyan, 0.0F, 0.0F, new Color(0, 64, 0));
renderer.setSeriesPaint(0, gradientpaint);
renderer.setSeriesPaint(1, gradientpaint1);
//設置柱的 Outline 顏色
renderer.setSeriesOutlinePaint(0, Color.BLACK);
renderer.setSeriesOutlinePaint(1, Color.BLACK);
//設置每個category所包含的平行柱的之間距離
renderer.setItemMargin(0.1);
//顯示每個柱的數值,並修改該數值的字體屬性
renderer
.setItemLabelGenerator(new ());
String filename = ServletUtilities.saveChartAsPNG(freechart, 600,
400, null, session);
String grapUrl = request.getContextPath()
+ "/DisplayChart?filename=" + filename;
%>
<center>
<img src="<%=grapUrl%>" width="700" height="500" border="0"
usemap="#<%=filename%>">
</center>
I. java如何將資料庫中的數據統計後用jfreechart顯示出來(要具體代碼)
其實挺簡單的,注意我寫的注釋!
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%> //上面是需要添加的頭文件
<html>
<body>
<%
String dataName[]=new String[]{"0-30歲","30-50歲","50-70歲","70歲以上"};//顯示數據系列
int dataValueCount[]={4,5,4,6};//數據系列對應的值
//以上兩行可以從資料庫里去取值,用循環寫入數組
//------創建數據集,並設置值------
DefaultCategoryDataset categoryDataset = newDefaultCategoryDataset();//這個表示柱狀圖
for(int i=0;i<dataName.length;i++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);//循環寫入數據集
String titleString="用戶年齡階段分布統計圖";//圖的標題
JFreeChart chart = ChartFactory.createBarChart(titleString,"用戶年齡階段","數量",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);//chart就是欲創建的圖表
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);//這行的意思是輸出成一個JPEG形式的文件顯示
%>
</body>
</html>
其實後面還有很多參數的,比如顏色,柱子的標題等等,太多屬性了,這個你查看一下JFREECHART的文檔就行了,比如下面這樣,很容易吧。
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
/*
* VALUE_TEXT_ANTIALIAS_OFF表示將文字的抗鋸齒關閉,
* 使用的關閉抗鋸齒後,字體盡量選擇12到14號的宋體字,這樣文字最清晰好看
*/
// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
chart.setTextAntiAlias(false);
chart.setBackgroundPaint(Color.white);
// create plot
CategoryPlot plot = chart.getCategoryPlot();
// 設置橫虛線可見
plot.setRangeGridlinesVisible(true);
// 虛線色彩
plot.setRangeGridlinePaint(Color.gray);
// 數據軸精度
NumberAxis vn = (NumberAxis) plot.getRangeAxis();
// vn.setAutoRangeIncludesZero(true);
DecimalFormat df = new DecimalFormat("#0.00");
vn.setNumberFormatOverride(df); // 數據軸數據標簽的顯示格式
// x軸設置
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 軸標題
domainAxis.setTickLabelFont(labelFont);// 軸數值
屬性比較多,不可能全貼出來,也不必全用,設置一些實用的屬性即可。