很多朋友看了我以前的一篇关于jfreechart+sql实现时间曲线图后都来问我,有没有可以自定义x轴坐标刻度名字的方法,其实在我写了那篇文章之后,我发现了时间曲线图的一些问题,例如时间间隔不平均的情况下,曲线图成形难看,且x轴时间显示不够人性化,当然这也可能是我没有发现处理好这个问题的方法。。。之后我还是使用了另一个方法去完成了那个客户的时间曲线图要求,就是使用了x轴坐标自定义的方法。。
关于如何配置Jfreechart等的具体内容可以参考我以前的文章:jfreechart+sql实现时间曲线图
Demo :
<%@ page import="java.awt.*,
javax.swing.JPanel,
org.jfree.chart.*,
org.jfree.chart.axis.*,
org.jfree.chart.plot.*,
org.jfree.chart.renderer.category.LineAndShapeRenderer,
org.jfree.data.category.CategoryDataset,
org.jfree.data.category.DefaultCategoryDataset,
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,
org.jfree.chart.title.TextTitle,
org.jfree.chart.servlet.ServletUtilities"%>
javax.swing.JPanel,
org.jfree.chart.*,
org.jfree.chart.axis.*,
org.jfree.chart.plot.*,
org.jfree.chart.renderer.category.LineAndShapeRenderer,
org.jfree.data.category.CategoryDataset,
org.jfree.data.category.DefaultCategoryDataset,
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,
org.jfree.chart.title.TextTitle,
org.jfree.chart.servlet.ServletUtilities"%>
<%
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
int Y=1,Y1=2;
String X="X1",X2="X2";
defaultcategorydataset.addValue(Y,"Avg",X);
defaultcategorydataset.addValue(Y1,"Avg",X1);
//Y是Y轴的数值,X是你在X轴自己定义的字符,"Avg"是两边数据对应的曲线图名,可以依靠定义不同的名字来添加多条曲线
CategoryDataset createDataset=(CategoryDataset) defaultcategorydataset;
JFreeChart jfreechart = ChartFactory.createLineChart("title", "Date", "Data", createDataset, PlotOrientation.VERTICAL, true, true,false);
TextTitle texttitle=new TextTitle(jfree1_title,new Font("黑体",Font.PLAIN,14));
jfreechart.setTitle(texttitle);
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
categoryplot.setBackgroundPaint(Color.white);
categoryplot.setDomainGridlinePaint(Color.gray);
categoryplot.setDomainGridlinesVisible(true);
categoryplot.setRangeGridlinePaint(Color.gray);
NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberaxis.setAutoRangeIncludesZero(false);//设置Y轴的数据自动范围,不从0开始
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(1.57));//设置字体倾斜角度的
lineandshaperenderer.setSeriesShapesVisible(0,true); //设置第一根曲线图的交叉点显示
JFreeChart jfreechart = ChartFactory.createLineChart("title", "Date", "Data", createDataset, PlotOrientation.VERTICAL, true, true,false);
TextTitle texttitle=new TextTitle(jfree1_title,new Font("黑体",Font.PLAIN,14));
jfreechart.setTitle(texttitle);
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
categoryplot.setBackgroundPaint(Color.white);
categoryplot.setDomainGridlinePaint(Color.gray);
categoryplot.setDomainGridlinesVisible(true);
categoryplot.setRangeGridlinePaint(Color.gray);
NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberaxis.setAutoRangeIncludesZero(false);//设置Y轴的数据自动范围,不从0开始
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(1.57));//设置字体倾斜角度的
lineandshaperenderer.setSeriesShapesVisible(0,true); //设置第一根曲线图的交叉点显示
String filename = ServletUtilities.saveChartAsPNG(jfreechart, 400,200, null, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<img src="<%= graphURL %>" border=0 usemap="#<%= filename %>">
JFreeChart 自定义 X 轴
本文介绍如何使用 JFreeChart 实现自定义 X 轴标签的方法,通过实例展示了如何设置 X 轴上的坐标刻度名字,解决时间间隔不均匀导致的图表显示问题。
501

被折叠的 条评论
为什么被折叠?



