A. 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);// 軸數值
屬性比較多,不可能全貼出來,也不必全用,設置一些實用的屬性即可。
B. java jfreechart
在最的一行加老豎個 <%}%> 就行了唄。
-------------------------------------
<%@ page contentType="text/html;charset=GBK"%>
<%@ page
import="org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.chart.plot.PlotOrientation,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.category.CategoryDataset,
org.jfree.data.general.DatasetUtilities,
org.jfree.chart.plot.*,
org.jfree.chart.labels.*,
org.jfree.chart.renderer.category.BarRenderer3D,
java.awt.*, org.jfree.ui.*,
org.jfree.chart.axis.AxisLocation"%>
<%@ page import="java.sql.*"%>
<%
//連接資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jfree";
String usr="sa";
String pwd="";
Connection conn=DriverManager.getConnection(url,usr,pwd);
Statement stmt=conn.createStatement();
String sql="select * from jfree order by id";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
int a = rs.getInt("a");
int b = rs.getInt("b");
int c = rs.getInt("c");
int d = rs.getInt("州蔽d");
String e = rs.getString("e");
String f = rs.getString("f");
double[][] data = new double[][] {{a, b, c, d}, {a, b, c, d}, {a, b, c, d}, {a, b, c, d}};
String[] rowKeys = {f, f,f, f};
String[] columnKeys = {e, e, e, e};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
JFreeChart chart = ChartFactory.createBarChart3D("城市選擇", "城市", "選擇", dataset, PlotOrientation.VERTICAL, true, true, false);
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.white); //設置網格背景顏色
plot.setDomainGridlinePaint(Color.pink);//設置網格豎線顏色
plot.setRangeGridlinePaint(Color.pink); //設置網格橫線顏色
BarRenderer3D renderer = new BarRenderer3D(); //顯示每個柱的數值,並修改該數值的字冊含州體屬性
renderer.setBaseItemLabelGenerator(new ()); //默認的數字顯示在柱子中,通過如下兩句可調整數字的顯示
renderer.setBaseItemLabelsVisible(true); //注意:此句很關鍵,若無此句,那數字的顯示會被覆蓋,給人數字沒有顯示出來的問題
renderer.(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D); //設置每個地區所包含的平行柱的之間距離 //
renderer.setItemMargin(0.3); plot.setRenderer(renderer); //設置地區、銷量的顯示位置 //將下方的「肉類」放到上方
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT); //將默認放在左邊的「銷量」放到右方
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session);
String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;
%>
<img src="<%=graphURL %>" width=700 height=400 border=0
usemap="#<%= filename %>">
<%}%>
C. 小白求教,java項目中能不能用jfreechart,不是java web項目
JFreeChart是完全基源早於Java語言的開源項目,因此可以在java開發環境中使用,包括java應雹姿雀用程序,或者是java web應用都沒有任何問冊棚題。
D. JAVA用Jfreechart 畫圖,我設置了顯示的,怎麼顯不出來,求解
需要脊橋設置font
// 創建主題樣式
StandardChartTheme mChartTheme = new StandardChartTheme("CN");
/世野緩/ 設置標題字體
mChartTheme.setExtraLargeFont(new Font("黑體", Font.BOLD, 20));
// 設置軸搜模向字體
mChartTheme.setLargeFont(new Font("宋體", Font.CENTER_BASELINE, 15));
// 設置圖例字體
mChartTheme.setRegularFont(new Font("宋體", Font.CENTER_BASELINE, 15));
// 應用主題樣式
ChartFactory.setChartTheme(mChartTheme);
E. java中 jfreechart 如何從資料庫中讀取數據,顯示的時候作為一個動態的曲線圖展示出來,這個要如何實現
jfreechart有獲取後台的數據源屬旦鄭性,你後台將數據查詢出來就可以了。關於曲線圖的和遲腔生成jfreechart肯定有自動封裝的!調喚衫用就可以。
F. java JFreeChart 問題,X軸顯示的是時間,但是數據太多,擠成一團,如何讓X軸只顯示10個時間
調整前(默認1年單位)
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importorg.jfree.chart.ChartFactory;
importorg.jfree.chart.ChartUtilities;
importorg.jfree.chart.JFreeChart;
importorg.jfree.chart.axis.DateAxis;
importorg.jfree.chart.axis.DateTickUnit;
importorg.jfree.chart.plot.XYPlot;
importorg.jfree.data.time.Month;
importorg.jfree.data.time.TimeSeries;
importorg.jfree.data.time.TimeSeriesCollection;
{
publicstaticvoidmain(String[]args)throwsIOException{
//CreateData
TimeSeriess1=newTimeSeries("XXXX");
for(inti=0;i<10;i++){
intyear=2000+i;
s1.add(newMonth(1,year),101.8);
s1.add(newMonth(2,year),104.8);
s1.add(newMonth(3,year),103.3);
s1.add(newMonth(4,year),105.8);
s1.add(newMonth(5,year),110.6);
s1.add(newMonth(6,year),120.8);
s1.add(newMonth(7,year),115.3);
s1.add(newMonth(8,year),130.9);
s1.add(newMonth(9,year),131.7);
s1.add(newMonth(10,year),140.2);
s1.add(newMonth(11,year),141.8);
s1.add(newMonth(12,year),160.6);
}
TimeSeriesCollectiondataset=newTimeSeriesCollection();
閉讓轎dataset.addSeries(s1);
//CreateJFreeChart
JFreeChartchart=ChartFactory.createTimeSeriesChart("TITLE","TIMEAXISLABEL",
"VALUEAXISLABEL",dataset,true,true,false);
//這里是關鍵
XYPlotxyplot=(XYPlot)chart.getPlot();
DateAxisdomainAxis=(DateAxis)xyplot.getDomainAxis();//x軸設置
domainAxis.setTickUnit(newDateTickUnit(DateTickUnit.YEAR,5,newSimpleDateFormat("yyyy")));
//Output
FileoutputFile=newFile("SampleTimeSeriesChart.png");
ChartUtilities.saveChartAsPNG(outputFile,chart,500,500);
}
}
推薦這里,Jfreechart大全:
http://my.oschina.net/abian/blog/278465
G. JAVA如何將JFreeChart圖片導出到Excel
我才做了這個,你看看行不行,我是把生成的圖片放到一個臨時文件中,然後再用poi將這個圖片導入到excel中,代碼如下:
package jfreechart;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class testBarChart2 extends ActionSupport{
JFreeChart chart;
HttpSession session;
HttpServletRequest request;
@Override
public String execute() throws Exception {
request=ServletActionContext.getRequest();
session=request.getSession();
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(1000,"廣州","豬肉");
dataset.addValue(220,"廣州","牛肉");
dataset.addValue(530,"廣州","雞肉");
dataset.addValue(340,"廣州","魚肉");
chart=ChartFactory.createBarChart3D("肉類銷量統計圖","肉類","銷量",dataset,PlotOrientation.VERTICAL,false,false,false);
Font font=new Font("宋體",Font.BOLD,20);
CategoryPlot plot=(CategoryPlot)chart.getPlot();
TextTitle textTitle=chart.getTitle();
textTitle.setFont(font);//設置標題的字體
CategoryAxis domainAxis=plot.getDomainAxis();//柱狀圖的x軸
domainAxis.setTickLabelFont(font);//設置x軸坐標上的字體
domainAxis.setLabelFont(font);//設置x軸上的標題的字體
ValueAxis valueAxis=plot.getRangeAxis();//柱狀圖的y軸
valueAxis.setTickLabelFont(font);//設置y軸坐標上的字體
valueAxis.setLabelFont(font);//設置y軸坐標上的標題的字體
/**添加上下面的語句會在臨時文件夾下面生成圖片,去掉就不會有了*/
String filename="E:/tomcat/basicsms/apache-tomcat-6.0.18/temp/"+ServletUtilities.saveChartAsPNG(chart,500,300,null,session);
FileOutputStream fileOut = null;
BufferedImage bufferImg = null;
try {
// 先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File(filename));
ImageIO.write(bufferImg, "png", byteArrayOut);
// 創建一個工作薄
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("new sheet");
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,
(short) 1, 1, (short) 10, 20);
anchor.setAnchorType(2);
// 插入圖片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(0.8);
fileOut = new FileOutputStream("d:/workbook.xls");
// 寫入excel文件
wb.write(fileOut);
fileOut.close();
} catch (IOException io) {
io.printStackTrace();
System.out.println("io erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return SUCCESS;
}
public JFreeChart getChart() {
return chart;
}
}
當執行action的時候,圖片會在頁面顯示,也會導入到workbook.xls中,這個例子其實是我在網上找的,然後拼寫成的,希望對你有幫助,我目前也在研究當中,也可以共同討論
其實你要也可以試試jacob,它可以直接在excel中生成圖片,你可以自己研究研究
H. 用java寫有關JFreeChart亂碼的問題
試試把你工程中用到的文件的編碼方式都改成utf-8
I. java中使用jfreechart做柱狀圖,在jsp中顯示有問題,
jfreechart中顯示柱狀圖到jsp頁面:
package com.test.jfreechart;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
public class JFreeChartTest2 extends ApplicationFrame
{
public JFreeChartTest2(String title)
{
super(title);
this.setContentPane(createPanel()); //構造函數中自動創建Java的panel面板
}
public static CategoryDataset createDataset() //創建滑旁柱狀圖數據集
{
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.setValue(10,"a","管理人員");
dataset.setValue(20,"b","市場人員");
dataset.setValue(40,"c","開發人員");
dataset.setValue(15,"d","其他人員");
return dataset;
}
public static JFreeChart createChart(CategoryDataset dataset) //用數據集創建一個圖表
{
JFreeChart chart=ChartFactory.createBarChart("hi", "人員分布",
"人卜亂員數量", dataset, PlotOrientation.VERTICAL, true, true, false); //創建一個JFreeChart
chart.setTitle(new TextTitle("某公司組織結信弊橡構圖",new Font("宋體",Font.BOLD+Font.ITALIC,20)));//可以重新設置標題,替換「hi」標題
CategoryPlot plot=(CategoryPlot)chart.getPlot();//獲得圖標中間部分,即plot
CategoryAxis categoryAxis=plot.getDomainAxis();//獲得橫坐標
categoryAxis.setLabelFont(new Font("微軟雅黑",Font.BOLD,12));//設置橫坐標字體
return chart;
}
public static JPanel createPanel()
{
JFreeChart chart =createChart(createDataset());
return new ChartPanel(chart); //將chart對象放入Panel面板中去,ChartPanel類已繼承Jpanel
}
public static void main(String[] args)
{
JFreeChartTest2 chart=new JFreeChartTest2("某公司組織結構圖");
chart.pack();//以合適的大小顯示
chart.setVisible(true);
}
}
運行結果:
J. Java開發jfreechart的折線圖時,想要實現滑鼠移向每個折點時只顯示Y軸對應的數值,應該怎麼做
jfreechart只能產生靜態圖表,滑鼠移上去顯示的數值,實際上是靠html 的map來實現的,因此那個矩形框前頃橋是瀏覽慧猛器顯示的,與代碼無關,所以也改不了乎空的。
至於只顯示Y軸的值,請從chart得到plot,然後再從plot得到renderer,再自定義renderer的ToolTipGenerator,從而實現自定義的tooltip.
如果想要更動態的圖表,可以使用flash圖表,如fusioncharts