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

jfreeChart 画折线图有关问题,在先等,

2011-12-31 
jfreeChart 画折线图问题,在先等,急!!!!!!!!小弟在做项目的时候遇到了一个问题折线图的横坐标是用年月日显

jfreeChart 画折线图问题,在先等,急!!!!!!!!
小弟在做项目的时候遇到了一个问题
折线图的横坐标是用年月日显示的,最后一个点的日期看不到,只能看到年和月,
比如说最后一个横坐标值本来要显示2008-08-01,但图片上只显示2008-08-0 ,后面的1看不见了
有没有什么办法可以缩进横坐标间隔,使横坐标的最后一个值完整显示


--------------------------------
以下内容为自动编辑的内容,并非楼主的发贴内容,此仅用于显示而已,并无任何其他特殊作用
楼主【huoyutu】截止到2008-08-04 21:12:18的历史汇总数据(不包括此帖):
发帖的总数量:10 发帖的总分数:320 每贴平均分数:32  
回帖的总数量:54 得分贴总数量:17 回帖的得分率:31%  
结贴的总数量:9 结贴的总分数:270  
无满意结贴数:1 无满意结贴分:50  
未结的帖子数:1 未结的总分数:50  
结贴的百分比:90.00 % 结分的百分比:84.38 %  
无满意结贴率:11.11 % 无满意结分率:18.52 %  
值得尊敬
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=huoyutu

[解决办法]
应该可以在NumberAxis属性中设置
[解决办法]
[align=center]

Java code
 
折线图,有个地方可以设置的。好久没弄过这个了,找了下以前的代码,就一个生成时序图的例子了,要睡觉了,懒得找了
你可以把我的例子改下,一样,时序图其实就折线图,只不过横坐标刻度是时间而已,你可以把刻度设置为年就可以了

public class CopyOfDataToPictrueServiceImp1 implements DataToPictrueService {
  /**
* 创建JFreeChart TimeXY Chart(折线图)
*/
public static void main(String[] args) {

 
Long time1 = new java.util.GregorianCalendar().getTimeInMillis();
//创建XYDataset对象(准备数据)
XYDataset dataset = createXYDataset();
//根据Dataset 生成JFreeChart对象,以及做相应的设置
JFreeChart freeChart = createChart(dataset,"监测点日电压曲线图","时间","电压百分比");
//将JFreeChart对象输出到文件,Servlet输出流等
saveAsFile(freeChart, "D:\\lineXY.png", 700,800);
System.out.println("生成完毕");
Long time2 = new java.util.GregorianCalendar().getTimeInMillis();
System.out.println("生成所需的时间:" + (time2 - time1));
}


    // 保存为文件
public static void saveAsFile(JFreeChart chart, String outputPath,
int weight, int height) {
FileOutputStream out = null;
try {
File outFile = new File(outputPath);
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
out = new FileOutputStream(outputPath);
// 保存为PNG
ChartUtilities.writeChartAsPNG(out, chart, 500, 300);
// 保存为JPEG
// ChartUtilities.writeChartAsJPEG(out, chart, 500, 400);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
// do nothing
}
}
}
}


  // 根据XYDataset创建JFreeChart对象
public static JFreeChart createChart(XYDataset dataset,
String titleName,String XName,String YName) {
// 创建JFreeChart对象:ChartFactory.createXYLineChart
JFreeChart jfreechart = ChartFactory.createXYLineChart(
titleName, // 标题
XName, // categoryAxisLabel (category轴,横轴,X轴标签)
YName, // valueAxisLabel(value轴,纵轴,Y轴的标签)
dataset, // XYDataset对象(准备数据)
PlotOrientation.VERTICAL,  //直方图的方向 PlotOrientation.HORIZONTAL//水平方向
true, //定义图表是否包含图例
true, //定义图表是否包含提示
true);  //定义图表是否包含URL

jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
jfreechart.setBorderVisible(false);



//jfreechart.setDrawBarOutline(false);
// 使用CategoryPlot设置各种参数。
XYPlot plot = (XYPlot) jfreechart.getPlot();
plot.setBackgroundPaint(Color.BLACK);
// 背景色 透明度
plot.setBackgroundAlpha(0.1f);
// 前景色 透明度
plot.setForegroundAlpha(0.5f);
// 其它设置可以参考XYPlot类

Font labelFont = new Font("宋体", Font.TRUETYPE_FONT, 12);
NumberAxis numAxis = (NumberAxis)plot.getRangeAxis();
NumberFormat nf =NumberFormat.getPercentInstance();
numAxis.setNumberFormatOverride(nf);//设置y轴以百分比方式显示
numAxis.setTickUnit(new  NumberTickUnit(0.05)); //0.5为一个间隔单位 
numAxis.setLabelFont(labelFont);
numAxis.setLowerMargin(0.0D);// 数据轴下(左)边距
numAxis.setUpperMargin(0.0D);// 数据轴上(右)边距


  numAxis.setAutoRangeIncludesZero(false);
  numAxis.setAutoRangeStickyZero(true);
   
  numAxis.setLowerBound(-0.20D);//数据轴上的显示最小值
  numAxis.setUpperBound(0.20D);//数据轴上的显示最大值

  plot.setRangeGridlinePaint(Color.BLACK);//纵坐标格线颜色
  plot.setDomainGridlinePaint(Color.BLACK);//横坐标格线颜色
  plot.setBackgroundPaint(new Color(255, 255, 204));
DateAxis  dateaxis = new DateAxis();
dateaxis.setAutoTickUnitSelection(false);//数据轴的数据标签是否自动确定
SimpleDateFormat format = new SimpleDateFormat("HH时mm分"); //你的刻度是年该这里的显示格式
dateaxis.setDateFormatOverride(format);//设置x
dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MINUTE,48));//此处x轴单位间隔为48min  你可以把DateTickUnit设置成年即可,后面跟具体的多少年为刻度
dateaxis.setLabelFont(labelFont);
dateaxis.setLowerMargin(0.0D);// 数据轴下(左)边距
dateaxis.setUpperMargin(0.0D);// 数据轴上(右)边距

 

dateaxis.setTickLabelsVisible(true);

plot.setDomainAxis(dateaxis);

plot.setAxisOffset(new RectangleInsets(5D, 0D, 0D, 30D));

XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
    renderer.setShapesVisible(true);  //设置曲线是否显示数据点
    renderer.setBaseItemLabelsVisible(true);//设置项标签显示
    renderer.setBaseToolTipGenerator(new XYToolTipGenerator(){

public String generateToolTip(XYDataset dataset, int series,
int item) {
// TODO Auto-generated method stub
return "["+dataset.getXValue(series, item) + "]" +
dataset.getYValue(series, item);
}
   
    });
    plot.setRenderer(renderer);
return jfreechart;
}


    /**
* 创建XYDataset对象
*
*/
private static XYDataset createXYDataset() {


TimeSeriesCollection tsc = new TimeSeriesCollection();


TimeSeries timeSeries1  = new TimeSeries("a",Minute.class);
TimeSeries timeSeries2  = new TimeSeries("b",Minute.class);
timeSeries1.addOrUpdate(new Minute(1, 0, 1, 1, 2006), -0.02);
timeSeries1.addOrUpdate(new Minute(10, 0, 1, 1, 2006), -0.05);
timeSeries1.addOrUpdate(new Minute(20, 0, 1, 1, 2006), 0.01);
timeSeries1.addOrUpdate(new Minute(30, 0, 1, 1, 2006), 0.12);
timeSeries1.addOrUpdate(new Minute(40, 0, 1, 1, 2006), 0.17);
timeSeries1.addOrUpdate(new Minute(10, 1, 1, 1, 2006), -0.12);
timeSeries1.addOrUpdate(new Minute(30, 1, 1, 1, 2006), -0.10);
timeSeries1.addOrUpdate(new Minute(50, 1, 1, 1, 2006), 0.02);
timeSeries1.addOrUpdate(new Minute(60, 1, 1, 1, 2006), 0.10);
timeSeries1.addOrUpdate(new Minute(1, 2, 1, 1, 2006), -0.02);
timeSeries1.addOrUpdate(new Minute(10, 2, 1, 1, 2006), -0.05);
timeSeries1.addOrUpdate(new Minute(20, 2, 1, 1, 2006), 0.01);
timeSeries1.addOrUpdate(new Minute(30, 2, 1, 1, 2006), 0.12);


timeSeries1.addOrUpdate(new Minute(40, 2, 1, 1, 2006), 0.17);
timeSeries1.addOrUpdate(new Minute(10, 2, 1, 1, 2006), -0.12);
timeSeries1.addOrUpdate(new Minute(30, 3, 1, 1, 2006), -0.10);
timeSeries1.addOrUpdate(new Minute(50, 3, 1, 1, 2006), 0.02);
timeSeries1.addOrUpdate(new Minute(60, 3, 1, 1, 2006), 0.10);
timeSeries1.addOrUpdate(new Minute(1, 4, 1, 1, 2006), -0.02);
timeSeries1.addOrUpdate(new Minute(10, 4, 1, 1, 2006), -0.05);
timeSeries1.addOrUpdate(new Minute(20, 4, 1, 1, 2006), 0.01);
timeSeries1.addOrUpdate(new Minute(30, 4, 1, 1, 2006), 0.12);
timeSeries1.addOrUpdate(new Minute(40, 5, 1, 1, 2006), 0.17);
timeSeries1.addOrUpdate(new Minute(10, 5, 1, 1, 2006), -0.12);
timeSeries1.addOrUpdate(new Minute(30, 5, 1, 1, 2006), -0.10);
timeSeries1.addOrUpdate(new Minute(50, 5, 1, 1, 2006), 0.02);
timeSeries1.addOrUpdate(new Minute(60, 5, 1, 1, 2006), 0.10);

timeSeries2.addOrUpdate(new Minute(0, 6, 1, 2, 2006), 100);
timeSeries2.addOrUpdate(new Minute(40, 6, 1, 2, 2006), 500);
timeSeries2.addOrUpdate(new Minute(50, 6, 1, 2, 2006), 300);
timeSeries2.addOrUpdate(new Minute(30, 6, 1, 2, 2006), 800);

tsc.addSeries(timeSeries1);
//tsc.addSeries(timeSeries2);


tsc.setDomainIsPointsInTime(true);
return tsc;




}

}

[/align]

热点排行