package picture;
import java.awt.*;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.servlet.http.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.entity.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.xy.*;
import org.jfree.data.time.*;
public class TimeManyAxis implements TimeManyAxisInterface {
private String title;
private String xtitle;
private String ytitle1;
private String ytitle2;
private int width;
private int height;
private Color upBack; //边框色
private Color downBack;
private int colorhight;
private Color backround;
private String fileName=""; //文件名
public TimeManyAxis(String fileName){
this.fileName=fileName;
this.title="";
this.xtitle="";
this.ytitle1="";
this.ytitle2="";
this.width=435;
this.height=325;
this.upBack=Color.WHITE;
this.downBack=Color.WHITE;
this.colorhight=10;
this.backround=Color.WHITE;
}
public TimeManyAxis(String fileName,String title,String Xtitle,
String Ytitle1,String Ytitle2,int width,int height){
this.fileName=fileName;
this.title=title;
this.xtitle=Xtitle;
this.ytitle1=Ytitle1;
this.ytitle2=Ytitle2;
this.width=width;
this.height=height;
this.upBack=Color.WHITE;
this.downBack=Color.WHITE;
this.colorhight=10;
this.backround=Color.WHITE;
}
public TimeManyAxis(String fileName,String title,String Xtitle,
String Ytitle1,String Ytitle2,Color backround,int width,int height){
this.fileName=fileName;
this.title=title;
this.xtitle=Xtitle;
this.ytitle1=Ytitle1;
this.ytitle2=Ytitle2;
this.width=width;
this.height=height;
this.upBack=Color.WHITE;
this.downBack=Color.WHITE;
this.colorhight=10;
this.backround=backround;
}
public TimeManyAxis(String fileName,String title,String Xtitle,
String Ytitle1,String Ytitle2,int width,int height,
Color upback,Color downback,int colorhight,Color backround){
this.fileName=fileName;
this.title=title;
this.xtitle=Xtitle;
this.ytitle1=Ytitle1;
this.ytitle2=Ytitle2;
this.width=width;
this.height=height;
this.upBack=upback;
this.downBack=downback;
this.colorhight=colorhight;
this.backround=backround;
}
/*
*//**
*
* @param chart
* @return
*//*
public static XYPlot getPlot(JFreeChart chart){
XYPlot plot=chart.getXYPlot();
return plot;
}
*//**
* 将附加轴和数据映射在一起
* @param axis1 加的轴
* @param plot
* @param t2
*//*
public static void mapDatasetToRangeAxis(ValueAxis axis1,XYPlot plot,
TimeSeriesCollection t2){
plot.setRangeAxis(1, axis1);
plot.setDataset(1,t2);
plot.mapDatasetToRangeAxis(1,1);
}
*//**
* 得到指定刻度和轴范围的轴
* @param rangeAxis
* @param ytitle2 轴的名称
* @param d1 轴的最小值
* @param d2 轴的最大值
* @param d3 轴的刻度间隔
* @return 返回指定刻度和轴范围的轴
*//*
public static ValueAxis getValueAxis(String ytitle2,double d1,double d2,double d3){
NumberAxis axis1 = new NumberAxis(ytitle2);
axis1.setAutoRange(false);//不不使用自动设定范围
axis1.setRange(d1, d2);
axis1.setTickUnit(new NumberTickUnit(d3));
return axis1;
}
*//**
* 得到属性默认的轴
* @param ytitle2
* @return 轴对象
*//*
public static ValueAxis getValueAxis(String ytitle2){
ValueAxis axis1 = new NumberAxis(ytitle2);
return axis1;
}
*//**
* @param d 柱子之间的距离
* @param c 柱子的颜色
* @return 柱形作图器
*//*
public static XYBarRenderer getBarRenderer(double d,Color c){
XYBarRenderer xyBarRender=new XYBarRenderer();
xyBarRender.setMargin(d);
xyBarRender.setSeriesPaint(0, c);
return xyBarRender;
}
*//**
* @return 返回线型作图器
*//*
public static XYLineAndShapeRenderer getLineRenderer(){
XYLineAndShapeRenderer render=new XYLineAndShapeRenderer();
return render;
}
*//**
* @param renderer 做图器
* @param plot
*//*
public static void setRenderer(XYItemRenderer renderer,XYPlot plot){
plot.setRenderer(1,renderer);
}
*//**
* @param t1 数据集
* @param title 图片的名称
* @param xtitle x轴的名称
* @param ytitle1 y轴的名称
* @return
*//*
public static JFreeChart getChart(TimeSeriesCollection t1,
String title,String xtitle,String ytitle1){
JFreeChart chart = ChartFactory.createTimeSeriesChart
(title, xtitle, ytitle1, t1,
true,//是否显示图例
true,//是否显示数据
false//是否设置url
);
return chart;
}
*//**设置图片边框的颜色
* @param chart
* @param c1 边框上边颜色
* @param c2 边框下边颜色
* @param hight 边框下边颜色显示的高度
*//*
public static void setBackgroundPaint(JFreeChart chart,Color c1,Color c2,int hight){
GradientPaint chartGP = new GradientPaint(0, 0, c1, 0, hight,
c2, false);
chart.setBackgroundPaint(chartGP);
}
*//**
* 设置图片背景颜色
* @param plot
* @param c
*//*
public static void setBackgroundPaint(XYPlot plot,Color c){
plot.setBackgroundPaint(c);
}
*/
/**
* @param format 轴的时间显示格式
* @param datetickunit DateTickUnit的静态属性 年0 月1 日2 时3 分4 秒5 毫秒6
* @param length 时间显示的宽度 默认为1
* @return 时间轴
*/
public DateAxis getDomainAxis(String format,int datetickunit,int length){
DateAxis domainAxis = new DateAxis(xtitle);
DateFormat dateFormat = new SimpleDateFormat(format);
DateTickUnit unit = new DateTickUnit(datetickunit, length, dateFormat);
domainAxis.setTickUnit(unit);
return domainAxis;
}
/**
* @param format 轴的时间显示格式
* @param datetickunit DateTickUnit的静态属性 年0 月1 日2 时3 分4 秒5 毫秒6
* @return 时间轴
*/
public DateAxis getDomainAxis(String format,int datetickunit){
DateAxis domainAxis = new DateAxis(xtitle);
DateFormat dateFormat = new SimpleDateFormat(format);
DateTickUnit unit = new DateTickUnit(datetickunit, 1, dateFormat);
domainAxis.setTickUnit(unit);
return domainAxis;
}
/**
* @param t1 数据集1
* @param t2 数据集2
* @param c 柱子的颜色
* @param d1 轴的最小值
* @param d2 轴的最大值
* @param d3 轴的刻度间隔
* @param distance 柱子之间的距离 默认为0.4
* @param domainAxis 设置的横轴 默认为null
* @param request
* @return 返回文件路径 graphURL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,double d1,double d2,double d3,double distance,DateAxis domainAxis,
HttpServletRequest request){
//HttpSession session=request.getSession(true);
JFreeChart chart = ChartFactory.createTimeSeriesChart
(title, xtitle, ytitle1, t1,
true,//是否显示图例
true,//是否显示数据
false//是否设置url
);
//设置图片边框颜色
GradientPaint chartGP = new GradientPaint(0, 0, upBack, 0, colorhight,
downBack, false);
chart.setBackgroundPaint(chartGP);
XYPlot plot=chart.getXYPlot();
//设置图片背景颜色
plot.setBackgroundPaint(backround);
//设置横轴显示格式
if(domainAxis!=null){
plot.setDomainAxis(domainAxis);
}
//设置纵轴
NumberAxis axis1;
if(d1==0&&d2==0&&d3==0){
axis1 = new NumberAxis(ytitle2);
}else{
axis1 = new NumberAxis(ytitle2);
axis1.setAutoRange(false);//不不使用自动设定范围
axis1.setRange(d1, d2);
axis1.setTickUnit(new NumberTickUnit(d3));
}
//将数据和附加轴影射在一起
plot.setRangeAxis(1, axis1);
plot.setDataset(1,t2);
plot.mapDatasetToRangeAxis(1,1);
//得到柱形作图器
XYBarRenderer xyBarRender=new XYBarRenderer();
//设置柱形之间的距离,柱子的颜色
xyBarRender.setMargin(distance);
xyBarRender.setSeriesPaint(0, c);
plot.setRenderer(1,xyBarRender);
/* String graphURL = "";
try {
graphURL = ChartServlet.saveChartAsPNG(chart, width, height,
request,fileName);
System.out.println("fileName = "+graphURL);
} catch (IOException e) {
System.out.println("------ 在绘制图片时抛出异常,内容如下:");
e.printStackTrace();
}*/
//固定用法
/*ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
// 生成指定格式的图片,并返回图片名称
String fileName = "";
try {
fileName = ChartServlet.saveChartAsPNG(chart, width, height,
info, session,request);
} catch (IOException e) {
System.out.println("------ 在绘制图片时抛出异常,内容如下:");
e.printStackTrace();
}
// 组织图片浏览路径
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
return graphURL;*/
ChartFrame frame = new ChartFrame("中国联通股票", chart);
frame.pack();
frame.setVisible(true);
return "s";
//return graphURL;
}
/**
* @param t1
* @param t2
* @param c
* @param d1
* @param d2
* @param d3
* @param domainAxis
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,double d1,double d2,double d3,DateAxis domainAxis,HttpServletRequest request){
return draw( t1, t2,c,d1,d2,d3,0.4,domainAxis,request);
}
/**
* @param t1
* @param t2
* @param c
* @param distance
* @param domainAxis
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,double distance,DateAxis domainAxis,HttpServletRequest request){
return draw( t1, t2,c,0,0,0,distance,domainAxis,request);
}
/**
* @param t1
* @param t2
* @param c
* @param domainAxis
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,DateAxis domainAxis,HttpServletRequest request){
return draw( t1, t2,c,0,0,0,0.4,domainAxis,request);
}
/**
* @param t1
* @param t2
* @param c
* @param d1
* @param d2
* @param d3
* @param distance
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1, TimeSeriesCollection t2, Color c,
double d1, double d2, double d3, double distance, HttpServletRequest request) {
return draw( t1, t2,c, d1, d2, d3, distance,null, request);
}
/**
* @param t1
* @param t2
* @param c
* @param d1
* @param d2
* @param d3
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,double d1,double d2,double d3,HttpServletRequest request){
return draw( t1, t2,c,d1,d2,d3,0.4,null,request);
}
/**
* @param t1
* @param t2
* @param c
* @param distance
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,double distance,HttpServletRequest request){
return draw( t1, t2,c,0,0,0,distance,null,request);
}
/**
* @param t1
* @param t2
* @param c
* @param request
* @return URL
*/
public String draw(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color c,HttpServletRequest request){
return draw( t1, t2,c,0,0,0,0.4,null,request);
}
/**
* @param t1 数据集1
* @param t2 数据集2
* @param c 区线组的颜色
* @param d1 轴的最小值
* @param d2 轴的最大值
* @param d3 轴的刻度间隔
* @param request
* @return 返回文件路径 graphURL
*/
public String drawLine(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color[] c,double d1,double d2,double d3,DateAxis domainAxis,HttpServletRequest request){
//HttpSession session=request.getSession(true);
JFreeChart chart = ChartFactory.createTimeSeriesChart
(title, xtitle, ytitle1, t1,
true,//是否显示图例
true,//是否显示数据
false//是否设置url
);
GradientPaint chartGP = new GradientPaint(0, 0, upBack, 0, colorhight,
downBack, false);
chart.setBackgroundPaint(chartGP);
XYPlot plot=chart.getXYPlot();
plot.setBackgroundPaint(backround);
if(domainAxis!=null){
plot.setDomainAxis(domainAxis);
}
NumberAxis axis1;
if(d1==0&&d2==0&&d3==0){
axis1 = new NumberAxis(ytitle2);
}else{
axis1 = new NumberAxis(ytitle2);
axis1.setAutoRange(false);//不不使用自动设定范围
axis1.setRange(d1, d2);
axis1.setTickUnit(new NumberTickUnit(d3));
}
plot.setRangeAxis(1, axis1);
plot.setDataset(1,t2);
plot.mapDatasetToRangeAxis(1,1);
XYLineAndShapeRenderer xyBarRender=new XYLineAndShapeRenderer();
for(int i=0;i<(c.length);i++){
xyBarRender.setSeriesPaint(i, c[i]);
}
plot.setRenderer(1,xyBarRender);
String graphURL = "";
try {
graphURL = ChartServlet.saveChartAsPNG(chart, width, height,
request,fileName);
System.out.println("fileName = "+graphURL);
} catch (IOException e) {
System.out.println("------ 在绘制图片时抛出异常,内容如下:");
e.printStackTrace();
}
return graphURL;
//固定用法
/*ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
// 生成指定格式的图片,并返回图片名称
String fileName = "";
try {
fileName = ChartServlet.saveChartAsPNG(chart, width, height,
info, session,request);
} catch (IOException e) {
System.out.println("------ 在绘制图片时抛出异常,内容如下:");
e.printStackTrace();
}
// 组织图片浏览路径
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
return graphURL;*/
/*ChartFrame frame = new ChartFrame("中国联通股票", chart);
frame.pack();
frame.setVisible(true);
return "s";*/
}
public String drawLine(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color[] c,DateAxis domainAxis,HttpServletRequest request){
return drawLine( t1, t2,c,0,0,0,domainAxis,request);
}
public String drawLine(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color[] c,double d1,double d2,double d3,HttpServletRequest request){
return drawLine( t1, t2,c,d1,d2,d3,null,request);
}
public String drawLine(TimeSeriesCollection t1,TimeSeriesCollection t2,
Color[] c,HttpServletRequest request){
return drawLine( t1, t2,c,0,0,0,null,request);
}
public static void main(String[] args) {
TimeSeriesCollection ts2=new TimeSeriesCollection();
TimeSeries series2=new TimeSeries("股票");//对应时间成交量数据
series2.add(new Day(18,8,2008), 119701900/100);
series2.add(new Day(19,8,2008), 109719000/100);
series2.add(new Day(20,8,2008), 178492400/100);
series2.add(new Day(21,8,2008), 269978500/100);
series2.add(new Day(22,8,2008), 261042300/100);
/* TimeSeries series=new TimeSeries("rrr");//对应时间成交量数据
series.add(new Day(18,8,2008), 219701900/100);
series.add(new Day(19,8,2008), 309719000/100);
series.add(new Day(20,8,2008), 178492400/100);
series.add(new Day(21,8,2008), 369978500/100);
series.add(new Day(22,8,2008), 151042300/100);
ts2.addSeries(series);*/
ts2.addSeries(series2);
TimeSeriesCollection ts1=new TimeSeriesCollection();
TimeSeries time1=new TimeSeries("abbbb");
time1.addOrUpdate(new Day(18,8,2008),2.0);
time1.addOrUpdate(new Day(19,8,2008),4.2);
time1.addOrUpdate(new Day(20,8,2008),9.0);
time1.addOrUpdate(new Day(21,8,2008),6.0);
time1.addOrUpdate(new Day(22,8,2008),3.0);
TimeSeries time2=new TimeSeries("baaa");
time2.add(new Day(18,8,2008),8.0);
time2.add(new Day(19,8,2008),4.0);
time2.add(new Day(20,8,2008),2.0);
time2.add(new Day(21,8,2008),7.0);
time2.add(new Day(22,8,2008),6.0);
ts1.addSeries(time1);
ts1.addSeries(time2);
TimeManyAxis t=new TimeManyAxis("jfreechart","abc","a","b","c",300,200);
HttpServletRequest request=null;
Color[] c=new Color[]{Color.CYAN,Color.YELLOW};
DateAxis axis=t.getDomainAxis("MM-dd",2,1);
t.draw(ts1,ts2,Color.YELLOW,0,0,0,axis,request);
}
}