用jsp怎样生成柱状图,饼状图,折线图

2024-11-06 16:34:11
推荐回答(2个)
回答(1):

jsp生成柱状图,饼状图,折线图可以借助于jfreechart。

1、柱状图的生成源码:

/** 

 * 生产柱状图 

 * @version 1.0 

 * @since 

 */  

@SuppressWarnings("serial")  

public class PillarServlet extends HttpServlet {  

    @Override  

    protected void service(HttpServletRequest request,  

            HttpServletResponse response) throws ServletException, IOException {  

        response.setContentType("text/html");  

        // 使用普通数据集  

        DefaultCategoryDataset chartDate = new DefaultCategoryDataset();  

        // 增加测试数据,第一个参数是访问量,最后一个是时间,中间是显示用不考虑  

        chartDate.addValue(55, "访问量", "2010-01");  

        chartDate.addValue(65, "访问量", "2010-02");  

        chartDate.addValue(59, "访问量", "2010-03");  

        chartDate.addValue(156, "访问量", "2010-04");  

        chartDate.addValue(452, "访问量", "2010-05");  

        chartDate.addValue(359, "访问量", "2010-06");  

        try {  

            // 从数据库中获得数据集  

            DefaultCategoryDataset data = chartDate;  

              

            // 使用ChartFactory创建3D柱状图,不想使用3D,直接使用createBarChart  

            JFreeChart chart = ChartFactory.createBarChart3D(  

                    "网站月访问量统计", // 图表标题  

                    "时间", // 目录轴的显示标签  

                    "访问量", // 数值轴的显示标签  

                    data, // 数据集  

                    PlotOrientation.VERTICAL, // 图表方向,此处为垂直方向  

                    // PlotOrientation.HORIZONTAL, //图表方向,此处为水平方向  

                    true, // 是否显示图例  

                    true, // 是否生成工具  

                    false // 是否生成URL链接  

                    );            

            // 设置整个图片的背景色  

            chart.setBackgroundPaint(Color.PINK);  

            // 设置图片有边框  

            chart.setBorderVisible(true);  

            Font kfont = new Font("宋体", Font.PLAIN, 12);    // 底部  

            Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题  

            // 图片标题  

            chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));  

            // 底部  

            chart.getLegend().setItemFont(kfont);  

            // 得到坐标设置字体解决乱码  

            CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();  

            categoryplot.setDomainGridlinesVisible(true);  

            categoryplot.setRangeCrosshairVisible(true);  

            categoryplot.setRangeCrosshairPaint(Color.blue);  

            NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();  

            numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  

            BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();  

            barrenderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));  

            barrenderer.setSeriesItemLabelFont(1, new Font("宋体", Font.PLAIN, 12));  

            CategoryAxis domainAxis = categoryplot.getDomainAxis();           

            /*------设置X轴坐标上的文字-----------*/  

            domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));  

            /*------设置X轴的标题文字------------*/  

            domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));  

            /*------设置Y轴坐标上的文字-----------*/  

            numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));  

            /*------设置Y轴的标题文字------------*/  

            numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));  

            /*------这句代码解决了底部汉字乱码的问题-----------*/  

            chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));  

            // 生成图片并输出  

            ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,  

                    chart, 500, 300, null);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

2、生成饼状统计图:

/** 

 * 生成饼状统计图 

 * @version 1.0 

 * @since 

 */  

@SuppressWarnings("serial")  

public class CakeServlet extends HttpServlet {  

    protected void service(HttpServletRequest request,  

            HttpServletResponse response) throws ServletException, IOException {  

        response.setContentType("text/html");  

        // 默认数据类型  

        DefaultPieDataset dataType = new DefaultPieDataset();  

        // 数据参数 内容,数量  

        dataType.setValue("IE6", 156);  

        dataType.setValue("IE7", 230);  

        dataType.setValue("IE8", 45);  

        dataType.setValue("火狐", 640);  

        dataType.setValue("谷歌", 245);  

        try {  

            DefaultPieDataset data = dataType;  

            // 生成普通饼状图除掉 3D 即可  

            // 生产3D饼状图  

            PiePlot3D plot = new PiePlot3D(data);  

            JFreeChart chart = new JFreeChart(  

                    "用户使用的浏览器类型",            // 图形标题  

                    JFreeChart.DEFAULT_TITLE_FONT, // 标题字体  

                    plot,                          // 图标标题对象  

                    true                           // 是否显示图例  

            );  

            // 设置整个图片的背景色  

            chart.setBackgroundPaint(Color.PINK);  

            // 设置图片有边框  

            chart.setBorderVisible(true);  

            // 配置字体  

            Font kfont = new Font("宋体", Font.PLAIN, 12);    // 底部  

            Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题  

            // 图片标题  

            chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));  

            // 底部  

            chart.getLegend().setItemFont(kfont);  

            ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,  

                    chart, 500, 300, null);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

3、柱状分布统计图:

/** 

 * 柱状分布统计图 

 * @version 1.0 

 * @since 

 */  

@SuppressWarnings("serial")  

public class ParagraphsServlet extends HttpServlet {  

    protected void service(HttpServletRequest request,  

            HttpServletResponse response) throws ServletException, IOException {  

        response.setContentType("text/html");  

        DefaultCategoryDataset dataTime = new DefaultCategoryDataset();  

        // 这是一组数据  

        dataTime.addValue(52, "0-6", "2010-1-1");  

        dataTime.addValue(86, "6-12", "2010-1-1");  

        dataTime.addValue(126, "12-18", "2010-1-1");  

        dataTime.addValue(42, "18-24", "2010-1-1");  

        // 这是一组数据  

        dataTime.addValue(452, "0-6", "2010-1-2");  

        dataTime.addValue(96, "6-12", "2010-1-2");  

        dataTime.addValue(254, "12-18", "2010-1-2");  

        dataTime.addValue(126, "18-24", "2010-1-2");  

        // 这是一组数据  

        dataTime.addValue(256, "0-6", "2010-1-3");  

        dataTime.addValue(86, "6-12", "2010-1-3");  

        dataTime.addValue(365, "12-18", "2010-1-3");  

        dataTime.addValue(24, "18-24", "2010-1-3");  

        try {  

            DefaultCategoryDataset data = dataTime;  

            // 使用ChartFactory创建3D柱状图,不想使用3D,直接使用createBarChart  

            JFreeChart chart = ChartFactory.createBarChart3D(  

                    "网站时间段访问量统计",   

                    "时间",   

                    "访问量",   

                    data,  

                    PlotOrientation.VERTICAL,   

                    true,   

                    false,   

                    false  

            );  

            // 设置整个图片的背景色  

            chart.setBackgroundPaint(Color.PINK);  

            // 设置图片有边框  

            chart.setBorderVisible(true);  

            Font kfont = new Font("宋体", Font.PLAIN, 12);    // 底部  

            Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题  

            // 图片标题  

            chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));  

            // 底部  

            chart.getLegend().setItemFont(kfont);  

            // 得到坐标设置字体解决乱码  

            CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();  

            categoryplot.setDomainGridlinesVisible(true);  

            categoryplot.setRangeCrosshairVisible(true);  

            categoryplot.setRangeCrosshairPaint(Color.blue);  

            NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();  

            numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  

            BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();  

            barrenderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));  

            barrenderer.setSeriesItemLabelFont(1, new Font("宋体", Font.PLAIN, 12));  

            CategoryAxis domainAxis = categoryplot.getDomainAxis();           

            /*------设置X轴坐标上的文字-----------*/  

            domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));  

            /*------设置X轴的标题文字------------*/  

            domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));  

            /*------设置Y轴坐标上的文字-----------*/  

            numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));  

            /*------设置Y轴的标题文字------------*/  

            numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));  

            /*------这句代码解决了底部汉字乱码的问题-----------*/  

            chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));    

            ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,  

                    chart, 500, 300, null);  

        } catch (Exception es) {  

            es.printStackTrace();  

        }  

    }  

}  

回答(2):

我给你一个饼图和一个折线图的例子
class BChart{
public static void main(String[] args){
PieDataset dataset = getDataSet();//设置数据源
JFreeChart chart = ChartFactory.createPieChart3D(
"时延分布统计图", // chart title
dataset,// data
true,// include legend
true,
false
);
PiePlot3D plot=(PiePlot3D)chart.getPlot();
// 图片中显示百分比:默认方式
//plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(1.0f);
// 指定显示的饼图上圆形(false)还椭圆形(true)
plot.setCircular(true);
// 设置图标题的字体
Font font = new Font(" 黑体",Font.CENTER_BASELINE,20);
TextTitle title = new TextTitle(" 时延分布统计图");
title.setFont(font);
chart.setTitle(title);
FileOutputStream fos_jpg = null;
try {
fos_jpg=new FileOutputStream("D:\\时延分布统计图.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);
fos_jpg.close();
} catch (Exception e) {
}

}

private static PieDataset getDataSet()//数据源构造
{
DefaultPieDataset dataset = new DefaultPieDataset();

dataset.setValue("login.jsp",50);
dataset.setValue("reg.jsp",60);

return dataset;
}