JFreeChart应用2
1.servlet
packagecom.logcd.servlet;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.GradientPaint;
importjava.awt.RenderingHints;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServlet;
importorg.jfree.chart.ChartFactory;
importorg.jfree.chart.ChartUtilities;
importorg.jfree.chart.JFreeChart;
importorg.jfree.chart.axis.CategoryAxis;
importorg.jfree.chart.axis.ValueAxis;
https://www.wendangku.net/doc/2211829951.html,bels.ItemLabelAnchor;
https://www.wendangku.net/doc/2211829951.html,bels.ItemLabelPosition;
https://www.wendangku.net/doc/2211829951.html,bels.StandardCategoryItemLabelGenerator;
https://www.wendangku.net/doc/2211829951.html,bels.StandardPieSectionLabelGenerator;
https://www.wendangku.net/doc/2211829951.html,bels.StandardXYItemLabelGenerator;
importorg.jfree.chart.plot.CategoryPlot;
importorg.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
importorg.jfree.chart.plot.Plot;
importorg.jfree.chart.plot.PlotOrientation;
importorg.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer3D;
importorg.jfree.chart.renderer.category.CategoryItemRenderer;
importorg.jfree.chart.renderer.category.LineAndShapeRenderer;
importorg.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
importorg.jfree.chart.title.LegendTitle;
importorg.jfree.data.category.CategoryDataset;
importorg.jfree.data.category.DefaultCategoryDataset;
importorg.jfree.data.general.Dataset;
importorg.jfree.data.general.DefaultPieDataset;
importorg.jfree.data.xy.XYDataset;
importorg.jfree.data.xy.XYSeries;
importorg.jfree.data.xy.XYSeriesCollection;
importorg.jfree.ui.TextAnchor;
importorg.jfree.util.Rotation;
public class JChartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static enumChartType {
BarChart,BarChart3D,PieChart,PieChart3D,LineChart,LineChart3D,XYLineChart
}
/**
* 处理请求
*/
public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException { String type = request.getParameter("type");
ChartTypechartType = getChartType(Integer.parseInt(type));
response.setContentType("image/jpeg");
JFreeChart chart = createChart(getDataSet(chartType),chartType);
setChartStyle(chart);
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 0.9f, chart,480, 350, null);
}
/**
* 创建图表
* @param dataset
* @paramchartType
* @return
*/
public static JFreeChartcreateChart(Dataset dataset,ChartTypechartType){
JFreeChart chart = null;
switch(chartType){
caseBarChart:
chart = ChartFactory.createBarChart("水果产量图",// 图表标题
"水果种类",// X轴的显示标签
"产量",// Y轴的显示标签
(CategoryDataset)dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true,//是否显示图例(对于简单的柱状图必须是false)
false,
false);//是否生成URL链接
break;
case BarChart3D:
chart = ChartFactory.createBarChart3D("水果产量图",// 图表标题
"水果种类",// X轴的显示标签
"产量",// Y轴的显示标签
(CategoryDataset)dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true,//是否显示图例(对于简单的柱状图必须是false)
false,//是否启用提示
false);//是否生成URL链接
break;
casePieChart:
chart = ChartFactory.createPieChart("水果产量图", (DefaultPieDataset)dataset, true,false, false);
break;
case PieChart3D:
chart = ChartFactory.createPieChart3D("水果产量图", (DefaultPieDataset)dataset, true,false, false);
break;
caseLineChart:
chart = ChartFactory.createLineChart("水果产量图", "水果种类",
"产量", (CategoryDataset)dataset, PlotOrientation.VERTICAL, true, false, false);
break;
case LineChart3D:
chart = ChartFactory.createLineChart3D("水果产量图", "水果种类",
"产量", (CategoryDataset)dataset, PlotOrientation.VERTICAL, true, false, false);
break;
caseXYLineChart:
chart = ChartFactory.createXYLineChart("苹果产量图", "月份",
"产量", (XYDataset)dataset, PlotOrientation.VERTICAL, true, false, false);
break;
}
return chart;
}
/**
* 设置chart风格
*
* @param chart
*/
public static void setChartStyle(JFreeChart chart) {
// 设置一个背景,从渐到深的倾斜
chart.setBackgroundPaint(new GradientPaint(0.0F, 0.0F, Color.PINK,10000F, 0.0F, Color.YELLOW));
chart.getTitle().setFont(new Font("SimSun", Font.BOLD, 12));// 标题的字体
Font font = new Font("黑体", Font.TRUETYPE_FONT, 10);// 公用字体
LegendTitle legend = (LegendTitle) chart.getLegend();// 图例
legend.setItemFont(font);
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
Plot plot = chart.getPlot();
if (plot instanceofCategoryPlot) {
CategoryPlotcategryPlot = (CategoryPlot) chart.getPlot();// 图表层
plot.setBackgroundAlpha(0.6f);
plot.setForegroundAlpha(0.9F);// 设置透明度
CategoryAxisdomain_axis = categryPlot.getDomainAxis();
domain_axis.setTickLabelFont(font);// X轴标尺字体
domain_axis.setLabelFont(font);// X轴标题标签字体
//domain_axis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); //横坐标数据倾斜45度
ValueAxisvalue_axis = categryPlot.getRangeAxis();
value_axis.setTickLabelFont(font);// Y轴标尺字体
value_axis.setLabelFont(font);// Y轴标题标签字体
// VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
CategoryItemRenderer renderer = chart.getCategoryPlot().getRenderer();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//设置item(bar)标签值的位置是在上面还是在bar内
renderer.setBasePositiveItemLabelPosition(newItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER
));
if(renderer instanceofLineAndShapeRenderer){
((LineAndShapeRenderer)renderer).setBaseShapesVisible(true);//显示折线图上的数据标志
}
if(renderer instanceof BarRenderer3D){
((BarRenderer3D)renderer).setItemLabelAnchorOffset(10D);// 设置柱形图上的文字偏离值
}
renderer.setBaseItemLabelFont(new Font("Serif", Font.PLAIN, 10));
renderer.setBaseItemLabelsVisible(true);
}
if (plot instanceofPiePlot) {
PiePlotpiePlot = (PiePlot) chart.getPlot();// 得到3D饼图的plot对象
plot.setBackgroundAlpha(0.6f);
piePlot.setStartAngle(290); // 设置旋转角度
piePlot.setDirection(Rotation.CLOCKWISE); // 设置旋转方向:顺时针方向
piePlot.setForegroundAlpha(0.5f); // 设置透明度
piePlot.setLabelFont((new Font("宋体", Font.PLAIN, 12)));
piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}:{1}({2})"));//名称、值、百分比piePlot.setSectionOutlinesVisible(false); //设置扇区边框不可见
if(!(plot instanceof PiePlot3D)){
piePlot.setExplodePercent("苹果", 0.2D); //设置扇区分离显示
}
}
if(plot instanceofXYPlot){
XYPlotxyPlot = (XYPlot) chart.getPlot();
xyPlot.setBackgroundAlpha(0.6f);
ValueAxisdomain_axis = xyPlot.getDomainAxis();
domain_axis.setTickLabelFont(font);
domain_axis.setLabelFont(font);
ValueAxisrange_axis = xyPlot.getRangeAxis();
range_axis.setTickLabelFont(font);
range_axis.setLabelFont(font);
XYLineAndShapeRenderer renderer
= (XYLineAndShapeRenderer) xyPlot.getRenderer();
renderer.setBaseShapesVisible(true);//显示数据标志
renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelFont(font);
}
}
public static ChartTypegetChartType(Integer type){
ChartTypechartType = ChartType.PieChart;
switch(type){
case 0: chartType = ChartType.BarChart;
break;
case 1: chartType = ChartType.BarChart3D;
break;
case 2: chartType = ChartType.PieChart;
break;
case 3: chartType = ChartType.PieChart3D;
break;
case 4: chartType = ChartType.LineChart;
break;
case 5: chartType = ChartType.LineChart3D;
break;
case 6: chartType = ChartType.XYLineChart;
break;
}
returnchartType;
}
/**
* 获取一个演示用的简单数据集对象
*
* @return
*/
private static Dataset getDataSet(ChartType type) {
switch(type){
caseBarChart :
case BarChart3D:
caseLineChart:
case LineChart3D:
DefaultCategoryDatasetcategorydataset = new DefaultCategoryDataset();
categorydataset.addValue(100, "北京", "苹果");
categorydataset.addValue(70, "上海", "苹果");
categorydataset.addValue(120, "广州", "苹果");
categorydataset.addValue(220, "北京", "梨子");
categorydataset.addValue(260, "上海", "梨子");
categorydataset.addValue(300, "广州", "梨子");
categorydataset.addValue(320, "北京", "葡萄");
categorydataset.addValue(370, "上海", "葡萄");
categorydataset.addValue(320, "广州", "葡萄");
categorydataset.addValue(490, "北京", "香蕉");
categorydataset.addValue(450, "上海", "香蕉");
categorydataset.addValue(400, "广州", "香蕉");
categorydataset.addValue(200, "北京", "荔枝");
categorydataset.addValue(230, "上海", "荔枝");
categorydataset.addValue(340, "广州", "荔枝");
returncategorydataset;
casePieChart:
case PieChart3D:
DefaultPieDatasetpieDataset = new DefaultPieDataset();
pieDataset.setValue("苹果", 100);
pieDataset.setValue("梨子", 200);
pieDataset.setValue("葡萄", 300);
pieDataset.setValue("香蕉", 400);
pieDataset.setValue("荔枝", 500);
returnpieDataset;
caseXYLineChart:
XYSeriesCollectionxyDataset = new XYSeriesCollection();
XYSeries apple = new XYSeries("苹果");
for(int i=0;i<12;i++){
apple.add(i+1, (int)(500*Math.random()));
}
xyDataset.addSeries(apple);
returnxyDataset;
}
return null;
}
}
2.web.xml
3.html中调用
jcommon-1.0.16.jar (302 KB)
gnujaxp.jar (226 KB)
jfreechart-1.0.13.jar (1.4 MB)