首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

javsjava或 jsp 实现柱状图,饼状图解决方法

2012-02-29 
javsjava或 jsp 实现柱状图,饼状图高手请进 求java或 jsp 实现柱状图、饼状图源码或调试通过以下源码均给分

javsjava或 jsp 实现柱状图,饼状图
高手请进 求java或 jsp 实现柱状图、饼状图源码
或调试通过以下源码均给分,下面源码session是怎么回事情
package bean;
import java.awt.Font;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;


public class PieChart
{
 //这个方法用来计算显示项数据所占比例
  private double getRatio(HashMap map, Object value)
  {
  double result = 0.00;
  double total = 0.00;
  String strTemp = "";
  Iterator iter = map.keySet().iterator();
  while (iter.hasNext())
  {
  Object key = iter.next();
  strTemp = (String) map.get(key);
  total += (Double.parseDouble(strTemp));
  }
  strTemp = (String) map.get(value);
  result = Double.parseDouble(strTemp) / total;
  //result = (double) Math.round(result);
  return result;
  }
  //创建绘制饼图
  public String JCreate(HashMap map, String title, HttpSession session, int w,int h)
  {
  DefaultPieDataset piedata = new DefaultPieDataset();
  //如果没有数据可以通过这一块来测试
  piedata.setValue("Google", 130);
  piedata.setValue("Baidu", 40.3);
  piedata.setValue("sohu", 19.6);
  // piedata.setValue("msn", 29.6);
   
  Iterator iter = map.keySet().iterator();
  while (iter.hasNext())
  {
  Object key = iter.next();
  piedata.setValue(key.toString(), getRatio(map, key));
  }

  // 3D饼图
  PiePlot3D plot = new PiePlot3D(piedata);
  // 饼图
  // PiePlot plot = new PiePlot(piedata);

  // 设定链接 ("link.jsp","section"));//section为参数,不填写则默认为category
  // plot.setURLGenerator(new StandardPieURLGenerator("link.jsp","section"));

  // 指定图片的透明度
  plot.setForegroundAlpha(1.0f);
  plot.setDepthFactor(0.08);

  // 指定显示的饼图上圆形(false)还椭圆形(true)
  plot.setCircular(false);

  // 显示百分比
  plot.setLabelGenerator(new
  StandardPieItemLabelGenerator(StandardPieItemLabelGenerator.DEFAULT_TOOLTIP_FORMAT));
  plot.setLegendLabelGenerator(new StandardPieItemLabelGenerator("{0}:({1}M, {2})"));

  JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot,true);
  // 设置图片背景色
  chart.setBackgroundPaint(java.awt.Color.white);

  // 设置图片标题属性
  Font font = new Font("黑体", Font.CENTER_BASELINE, 20);
  TextTitle _title = new TextTitle(title);
  _title.setFont(font);
  chart.setTitle(_title);

  plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
  // 把生成的图片放到临时目录
  StandardEntityCollection sec = new StandardEntityCollection();
  ChartRenderingInfo info = new ChartRenderingInfo(sec);

  String filename = null;
  try
  {
  filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);


  }
  catch (Exception e)
  {
  System.out.println("Exception - " + e.toString());
  filename = "public_error_500x300.png";
  }
  return filename;
  }
}

[解决办法]

Java code
public class WriteImage {        /**     * 生成棒状图方法     * @param session     * @param pw     * @return String     * @throws DAOException     */    public String writeBarImage(HttpSession session, PrintWriter pw) {        //默认种类的数据源        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();                //生成自己的数据信息        StudentInfoManager studentInfoManager = new StudentInfoManager();        List result = studentInfoManager.getStudentInfo();        for(int i = 0, n = result.size(); i < n; i++) {            StudentInfo studentInfo = (StudentInfo) result.get(i);            //参数(1.显示数据,2.数据标识名,3.数据持有对象)            defaultcategorydataset.addValue(studentInfo.getStudentPlanAch(),"计划得分", studentInfo.getStudentName());            defaultcategorydataset.addValue(studentInfo.getStudentAchievement(),"实际得分", studentInfo.getStudentName());        }                /*调用CharFactory的create方法来创建一个视图(createBarChart为饼状视图)         * constructor(标题1,标题2,标题3,数据集合,柱状图是纵向显示<VERTICAL>还是横向显示<HORIZONTAL>,)        */        JFreeChart jfreechart = ChartFactory.createBarChart("JFreeChart测试", "中信学生得分", "得分", defaultcategorydataset, PlotOrientation.VERTICAL, true, true, false);                //设置当前jfreechart图片的背景颜色        jfreechart.setBackgroundPaint(Color.white);                //获取当前jfreechart的点线种类        CategoryPlot categoryplot = jfreechart.getCategoryPlot();        //设置棒状图区域的背景颜色为灰色        categoryplot.setBackgroundPaint(Color.BLUE);                /*横向轴的数据线*/        //设置棒状图区域的主格子线条为白色        categoryplot.setDomainGridlinePaint(Color.white);                //将主格子线条设置为可视        categoryplot.setDomainGridlinesVisible(true);                /*纵向轴的数据线*/        //设置棒状图区域行列的格子线条的颜色        categoryplot.setRangeGridlinePaint(Color.red);        categoryplot.setRangeGridlinesVisible(true);                        //设置数字轴,获取当前数字轴的,也就是纵向的轴        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();                //设置当前数字轴的单位        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());                //设置棒状图的样式设置        BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer();        barrenderer.setDrawBarOutline(false);                //渐变颜色        GradientPaint gradientpaint = new GradientPaint(0.0F, 8.0F, Color.LIGHT_GRAY, 1.0F, 1.0F, new Color(0, 0, 64));        GradientPaint gradientpaint1 = new GradientPaint(1.0F, 9.0F, Color.green, 1.0F, 1.0F, new Color(0, 64, 0));                barrenderer.setSeriesPaint(0, gradientpaint);        barrenderer.setSeriesPaint(1, gradientpaint1);                //添加鼠标提示信息        barrenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());                //获取横向的轴也就是主轴        CategoryAxis categoryaxis = categoryplot.getDomainAxis();        categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.52359877559829882D));        //设置图片的绘制信息        ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());               String filename = null;        try {            filename = ServletUtilities.saveChartAsPNG(jfreechart, 500, 300, info, session);            //  Write the image map to the PrintWriter            ChartUtilities.writeImageMap(pw, filename, info, false);                        pw.flush();        } catch (IOException e) {            e.printStackTrace();        }        return filename;    }}
------解决方案--------------------


JFreeChart实现简单的柱状图和饼状图 

Java code
package test;         import java.io.FileOutputStream;     import java.io.IOException;         import org.jfree.data.category.CategoryDataset;     import org.jfree.data.category.DefaultCategoryDataset;     import org.jfree.data.general.DefaultPieDataset;     import org.jfree.chart.*;     import org.jfree.chart.plot.*;         public class ChartDemo {             public static void main(String[] args)          {             ChartDemo chartD = new ChartDemo();             chartD.createBarDemo("bar1.jpg");             chartD.createPieDemo("pie.jpg");                      }                  //创建柱状图         public void createBarDemo(String jpgname)         {             CategoryDataset dataset = getBarDataset();             JFreeChart chart = ChartFactory.createBarChart3D(                     "水果产量图", "水果","产量", dataset, PlotOrientation.VERTICAL,                      true,false,false);                          FileOutputStream jpg = null;             try {                 jpg = new FileOutputStream(jpgname);                 ChartUtilities.writeChartAsJPEG(jpg,0.5f,chart,400,300,null);                                               } catch (Exception e) {                 // TODO 自动生成 catch 块                 e.printStackTrace();             }             finally            {                 try {                     jpg.close();                 } catch (IOException e) {                     // TODO 自动生成 catch 块                     e.printStackTrace();                 }             }         }             //获取柱状图数据         private CategoryDataset getBarDataset() {             DefaultCategoryDataset dataset = new DefaultCategoryDataset();             dataset.addValue(100, "北京", "苹果");             dataset.addValue(200, "上海", "梨子");             dataset.addValue(300, "南昌", "葡萄");             dataset.addValue(400, "海南", "香蕉");             dataset.addValue(500, "北京", "荔枝");             dataset.addValue(-250, "上海", "荔枝");             return dataset;         }                  //创建饼图         public void createPieDemo(String jpgname)         {             DefaultPieDataset dataset = getPieDataset();             JFreeChart chart = ChartFactory.createPieChart3D("水果产量", dataset, true, true, true);                          FileOutputStream jpg = null;             try {                 jpg = new FileOutputStream(jpgname);                 ChartUtilities.writeChartAsJPEG(jpg,0.5f,chart,400,300,null);                                               } catch (Exception e) {                 // TODO 自动生成 catch 块                 e.printStackTrace();             }             finally            {                 try {                     jpg.close();                 } catch (IOException e) {                     // TODO 自动生成 catch 块                     e.printStackTrace();                 }             }         }             //获取饼图数据         private DefaultPieDataset getPieDataset() {             DefaultPieDataset dataset = new DefaultPieDataset();             dataset.setValue("苹果", 100);             dataset.setValue("梨子", 200);             dataset.setValue("葡萄", 300);             dataset.setValue("荔枝", 400);             dataset.setValue("香蕉", 500);             dataset.setValue("枣子", 600);             return dataset;         }              }
[解决办法]
看包名:
import org.jfree.chart.ChartRenderingInfo; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.entity.StandardEntityCollection; 
import org.jfree.chart.plot.PiePlot3D; 
import org.jfree.chart.servlet.ServletUtilities; 
import org.jfree.chart.title.TextTitle; 


import org.jfree.data.general.DefaultPieDataset;
用到的是jfreechart
[解决办法]
用JFreeChart:JFreeChart chart =ChartFactory.createPieChart3D("3D标题","数据集",是否有图例,是否包含图例说明,是否有链接);
[解决办法]
JFreeChart太容易实现了,还有OWC也可以,不过个人觉得JFreeChart实现的比OWC容易些。
[解决办法]

Java code
JFreeChart中文API JFreeChart类:void setAntiAlias(boolean flag)    字体模糊边界void setBackgroundImage(Image image)   背景图片void setBackgroundImageAlignment(int alignment)  背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundImageAlpha(float alpha)  背景图片透明度(0.0~1.0)void setBackgroundPaint(Paint paint)   背景色void setBorderPaint(Paint paint)   边界线条颜色void setBorderStroke(Stroke stroke)   边界线条笔触void setBorderVisible(boolean visible)   边界线条是否可见-----------------------------------------------------------------------TextTitle类:void setFont(Font font)     标题字体void setPaint(Paint paint)    标题字体颜色void setText(String text)    标题内容-----------------------------------------------------------------------StandardLegend(Legend)类:void setBackgroundPaint(Paint paint)   图示背景色void setTitle(String title)    图示标题内容void setTitleFont(Font font)    图示标题字体void setBoundingBoxArcWidth(int arcWidth)  图示边界圆角宽void setBoundingBoxArcHeight(int arcHeight)  图示边界圆角高void setOutlinePaint(Paint paint)   图示边界线条颜色void setOutlineStroke(Stroke stroke)   图示边界线条笔触void setDisplaySeriesLines(boolean flag)  图示项是否显示横线(折线图有效)void setDisplaySeriesShapes(boolean flag)  图示项是否显示形状(折线图有效)void setItemFont(Font font)    图示项字体void setItemPaint(Paint paint)    图示项字体颜色void setAnchor(int anchor)    图示在图表中的显示位置(参数常量在Legend类中定义)-----------------------------------------------------------------------Axis类:void setVisible(boolean flag)    坐标轴是否可见void setAxisLinePaint(Paint paint)   坐标轴线条颜色(3D轴无效)void setAxisLineStroke(Stroke stroke)   坐标轴线条笔触(3D轴无效)void setAxisLineVisible(boolean visible)  坐标轴线条是否可见(3D轴无效)void setFixedDimension(double dimension)  (用于复合表中对多坐标轴的设置)void setLabel(String label)    坐标轴标题void setLabelFont(Font font)    坐标轴标题字体void setLabelPaint(Paint paint)    坐标轴标题颜色void setLabelAngle(double angle)`   坐标轴标题旋转角度(纵坐标可以旋转)void setTickLabelFont(Font font)   坐标轴标尺值字体void setTickLabelPaint(Paint paint)   坐标轴标尺值颜色void setTickLabelsVisible(boolean flag)   坐标轴标尺值是否显示void setTickMarkPaint(Paint paint)   坐标轴标尺颜色void setTickMarkStroke(Stroke stroke)   坐标轴标尺笔触void setTickMarksVisible(boolean flag)   坐标轴标尺是否显示ValueAxis(Axis)类:void setAutoRange(boolean auto)    自动设置数据轴数据范围void setAutoRangeMinimumSize(double size)  自动设置数据轴数据范围时数据范围的最小跨度void setAutoTickUnitSelection(boolean flag)  数据轴的数据标签是否自动确定(默认为true)void setFixedAutoRange(double length)   数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)void setInverted(boolean flag)    数据轴是否反向(默认为false)void setLowerMargin(double margin)   数据轴下(左)边距void setUpperMargin(double margin)   数据轴上(右)边距void setLowerBound(double min)    数据轴上的显示最小值void setUpperBound(double max)    数据轴上的显示最大值void setPositiveArrowVisible(boolean visible)  是否显示正向箭头(3D轴无效)void setNegativeArrowVisible(boolean visible)  是否显示反向箭头(3D轴无效)void setVerticalTickLabels(boolean flag)  数据轴数据标签是否旋转到垂直void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)NumberAxis(ValueAxis)类:void setAutoRangeIncludesZero(boolean flag)  是否强制在自动选择的数据范围中包含0void setAutoRangeStickyZero(boolean flag)  是否强制在整个数据轴中包含0,即使0不在数据范围中void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式void setTickUnit(NumberTickUnit unit)   数据轴的数据标签(需要将AutoTickUnitSelection设false)DateAxis(ValueAxis)类:void setMaximumDate(Date maximumDate)   日期轴上的最小日期void setMinimumDate(Date minimumDate)   日期轴上的最大日期void setRange(Date lower,Date upper)   日期轴范围void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式void setTickUnit(DateTickUnit unit)   日期轴的日期标签(需要将AutoTickUnitSelection设false)void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置(参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义)CategoryAxis(Axis)类:void setCategoryMargin(double margin)   分类轴边距void setLowerMargin(double margin)   分类轴下(左)边距void setUpperMargin(double margin)   分类轴上(右)边距void setVerticalCategoryLabels(boolean flag)  分类轴标题是否旋转到垂直void setMaxCategoryLabelWidthRatio(float ratio)  分类轴分类标签的最大宽度-----------------------------------------------------------------------Plot类:void setBackgroundImage(Image image)   数据区的背景图片void setBackgroundImageAlignment(int alignment)  数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundPaint(Paint paint)   数据区的背景图片背景色void setBackgroundAlpha(float alpha)   数据区的背景透明度(0.0~1.0)void setForegroundAlpha(float alpha)   数据区的前景透明度(0.0~1.0)void setDataAreaRatio(double ratio)   数据区占整个图表区的百分比void setOutLinePaint(Paint paint)   数据区的边界线条颜色void setOutLineStroke(Stroke stroke)   数据区的边界线条笔触void setNoDataMessage(String message)   没有数据时显示的消息void setNoDataMessageFont(Font font)   没有数据时显示的消息字体void setNoDataMessagePaint(Paint paint)   没有数据时显示的消息颜色CategoryPlot(Plot)类:void setDataset(CategoryDataset dataset)  数据区的2维数据表void setColumnRenderingOrder(SortOrder order)  数据分类的排序方式void setAxisOffset(Spacer offset)   坐标轴到数据区的间距void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)void setDomainAxis(CategoryAxis axis)   数据区的分类轴void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setDomainGridlinesVisible(boolean visible)  分类轴网格是否可见void setDomainGridlinePaint(Paint paint)  分类轴网格线条颜色void setDomainGridlineStroke(Stroke stroke)  分类轴网格线条笔触void setRangeAxis(ValueAxis axis)   数据区的数据轴void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setRangeGridlinesVisible(boolean visible)  数据轴网格是否可见void setRangeGridlinePaint(Paint paint)   数据轴网格线条颜色void setRangeGridlineStroke(Stroke stroke)  数据轴网格线条笔触void setRenderer(CategoryItemRenderer renderer)  数据区的表示者(详见Renderer组)void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释void addRangeMarker(Marker marker,Layer layer)  给数据区加一个数值范围区域PiePlot(Plot)类:void setDataset(PieDataset dataset)   数据区的1维数据表void setIgnoreNullValues(boolean flag)   忽略无值的分类void setCircular(boolean flag)    饼图是否一定是正圆void setStartAngle(double angle)   饼图的初始角度void setDirection(Rotation direction)   饼图的旋转方向void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0),3D饼图无效void setLabelBackgroundPaint(Paint paint)  分类标签的底色void setLabelFont(Font font)    分类标签的字体void setLabelPaint(Paint paint)    分类标签的字体颜色void setLabelLinkMargin(double margin)   分类标签与图的连接线边距void setLabelLinkPaint(Paint paint)   分类标签与图的连接线颜色void setLabelLinkStroke(Stroke stroke)   分类标签与图的连接线笔触void setLabelOutlinePaint(Paint paint)   分类标签边框颜色void setLabelOutlineStroke(Paint paint)   分类标签边框笔触void setLabelShadowPaint(Paint paint)   分类标签阴影颜色void setMaximumLabelWidth(double width)   分类标签的最大长度(0.0~1.0)void setPieIndex(int index)    饼图的索引(复合饼图中用到)void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触void setSectionPaint(int section,Paint paint)  指定分类饼的颜色void setShadowPaint(Paint paint)   饼图的阴影颜色void setShadowXOffset(double offset)   饼图的阴影相对图的水平偏移void setShadowYOffset(double offset)   饼图的阴影相对图的垂直偏移void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式,设置成null则整个标签包括连接线都不显示void setToolTipGenerator(PieToolTipGenerator generator)  MAP中鼠标移上的显示格式void setURLGenerator(PieURLGenerator generator)   MAP中钻取链接格式PiePlot3D(PiePlot)类:void setDepthFactor(double factor)   3D饼图的Z轴高度(0.0~1.0)MultiplePiePlot(Plot)类:void setLimit(double limit)    每个饼图之间的数据关联(详细比较复杂)   void setPieChart(JFreeChart pieChart)   每个饼图的显示方式(见JFreeChart类个PiePlot类) 

热点排行