import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.Legend;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;import biz.framework.stock.DayHQReader;public class jfreeChartTool {
public static void createStockSYReport(int[] num) throws Exception{
int begindate = DayHQReader.beginDate;
int enddate = DayHQReader.endDate;
String date = begindate + "-"+enddate;
JFreeChart chart=ChartFactory.createBarChart3D(
date,
"",//目录轴的显示标签
"股票家数",//数值轴的显示标签
getDataSet(num),
PlotOrientation.VERTICAL,//设置图表方向
true,//复杂柱状图
false,
false
);
Legend legend =chart.getLegend();
//设置标题
chart.setTitle(new TextTitle("股票收益情况统计分析图,时间"+date, new Font("黑体",Font.PLAIN,22)));
//设置图表部分
CategoryPlot plot=(CategoryPlot)chart.getPlot();
BarRenderer3D renderer = new BarRenderer3D();
renderer = new org.jfree.chart.renderer.category.BarRenderer3D();
renderer.setBaseOutlinePaint(Color.red);
renderer.setSeriesPaint(1, new Color(255, 0, 0), true);//计划柱子的颜色为青色
renderer.setSeriesOutlinePaint(0,Color.BLACK);//边框为黑色
renderer.setSeriesPaint(0, new Color(0, 255, 0) , true);//实报柱子的颜色为绿色
renderer.setSeriesOutlinePaint(1,Color.red);//边框为红色
renderer.setItemMargin(0.1);//组内柱子间隔为组宽的10%
renderer.setLabelGenerator(new StandardCategoryLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗
renderer.setItemLabelPaint(Color.black);//字体为黑色
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
CategoryAxis categoryAxis=plot.getDomainAxis();//取得横轴
categoryAxis.setLabelFont(new Font("宋体",Font.PLAIN,29));//设置横轴显示标签的字体
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//分类标签以45度倾斜
categoryAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,18));//分类标签字体
NumberAxis numberAxis=(NumberAxis)plot.getRangeAxis();//取得纵轴
numberAxis.setLabelFont(new Font("宋体",Font.PLAIN,28));//设置纵轴显示标签字体
FileOutputStream fos=null;
fos=new FileOutputStream("d:\\股票收益统计分析图("+ date+").png");
ChartUtilities.writeChartAsJPEG(
fos,
1,
chart,
1400,
800,
null
);
fos.close();
}
private static CategoryDataset getDataSet(int[] num){
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
// dataset.addValue(num[29],"", "-300%以上");
// dataset.addValue(num[28],"","-300%");
// dataset.addValue(num[27], "", "-200%");
// dataset.addValue(num[26], "", "-150%");
// dataset.addValue(num[25],"","-120%");
// dataset.addValue(num[24], "", "-100%");
// dataset.addValue(num[23], "", "-90%");
// dataset.addValue(num[22], "", "-80%");
// dataset.addValue(num[21], "", "-70%");
// dataset.addValue(num[20], "", "-60%");
// dataset.addValue(num[19], "", "-50%");
// dataset.addValue(num[18], "", "-40%");
// dataset.addValue(num[17], "", "-30%");
// dataset.addValue(num[16], "", "-20%");
// dataset.addValue(num[15], "", "-10%");
// dataset.addValue(null, "", "0%");
// dataset.addValue(num[14],"", "10%");
// dataset.addValue(num[13],"","20%");
// dataset.addValue(num[12],"","30%");
// dataset.addValue(num[11], "", "40%");
// dataset.addValue(num[10],"","50%");
// dataset.addValue(num[9], "", "60%");
// dataset.addValue(num[8], "", "70%");
// dataset.addValue(num[7],"","80%");
// dataset.addValue(num[6],"","90%");
// dataset.addValue(num[5],"","100%");
// dataset.addValue(num[4], "", "120%");
// dataset.addValue(num[3], "", "150%");
// dataset.addValue(num[2], "", "200%");
// dataset.addValue(num[1], "", "300%");
// dataset.addValue(num[0],"", "300%以上");
//
dataset.addValue(num[29],"亏损", "-300%以上");
dataset.addValue(num[28],"亏损","-300%");
dataset.addValue(num[27], "亏损", "-200%");
dataset.addValue(num[26], "亏损", "-150%");
dataset.addValue(num[25],"亏损","-120%");
dataset.addValue(num[24], "亏损", "-100%");
dataset.addValue(num[23], "亏损", "-90%");
dataset.addValue(num[22], "亏损", "-80%");
dataset.addValue(num[21], "亏损", "-70%");
dataset.addValue(num[20], "亏损", "-60%");
dataset.addValue(num[19], "亏损", "-50%");
dataset.addValue(num[18], "亏损", "-40%");
dataset.addValue(num[17], "亏损", "-30%");
dataset.addValue(num[16], "亏损", "-20%");
dataset.addValue(num[15], "亏损", "-10%");
dataset.addValue(null, "盈利", "0%");
dataset.addValue(num[14],"盈利", "10%");
dataset.addValue(num[13],"盈利","20%");
dataset.addValue(num[12],"盈利","30%");
dataset.addValue(num[11], "盈利", "40%");
dataset.addValue(num[10],"盈利","50%");
dataset.addValue(num[9], "盈利", "60%");
dataset.addValue(num[8], "盈利", "70%");
dataset.addValue(num[7],"盈利","80%");
dataset.addValue(num[6],"盈利","90%");
dataset.addValue(num[5],"盈利","100%");
dataset.addValue(num[4], "盈利", "120%");
dataset.addValue(num[3], "盈利", "150%");
dataset.addValue(num[2], "盈利", "200%");
dataset.addValue(num[1], "盈利", "300%");
dataset.addValue(num[0],"盈利", "300%以上");
return dataset;
}
}
import java.awt.Font;
import java.io.FileOutputStream;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.Legend;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;import biz.framework.stock.DayHQReader;public class jfreeChartTool {
public static void createStockSYReport(int[] num) throws Exception{
int begindate = DayHQReader.beginDate;
int enddate = DayHQReader.endDate;
String date = begindate + "-"+enddate;
JFreeChart chart=ChartFactory.createBarChart3D(
date,
"",//目录轴的显示标签
"股票家数",//数值轴的显示标签
getDataSet(num),
PlotOrientation.VERTICAL,//设置图表方向
true,//复杂柱状图
false,
false
);
Legend legend =chart.getLegend();
//设置标题
chart.setTitle(new TextTitle("股票收益情况统计分析图,时间"+date, new Font("黑体",Font.PLAIN,22)));
//设置图表部分
CategoryPlot plot=(CategoryPlot)chart.getPlot();
BarRenderer3D renderer = new BarRenderer3D();
renderer = new org.jfree.chart.renderer.category.BarRenderer3D();
renderer.setBaseOutlinePaint(Color.red);
renderer.setSeriesPaint(1, new Color(255, 0, 0), true);//计划柱子的颜色为青色
renderer.setSeriesOutlinePaint(0,Color.BLACK);//边框为黑色
renderer.setSeriesPaint(0, new Color(0, 255, 0) , true);//实报柱子的颜色为绿色
renderer.setSeriesOutlinePaint(1,Color.red);//边框为红色
renderer.setItemMargin(0.1);//组内柱子间隔为组宽的10%
renderer.setLabelGenerator(new StandardCategoryLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗
renderer.setItemLabelPaint(Color.black);//字体为黑色
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
CategoryAxis categoryAxis=plot.getDomainAxis();//取得横轴
categoryAxis.setLabelFont(new Font("宋体",Font.PLAIN,29));//设置横轴显示标签的字体
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//分类标签以45度倾斜
categoryAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,18));//分类标签字体
NumberAxis numberAxis=(NumberAxis)plot.getRangeAxis();//取得纵轴
numberAxis.setLabelFont(new Font("宋体",Font.PLAIN,28));//设置纵轴显示标签字体
FileOutputStream fos=null;
fos=new FileOutputStream("d:\\股票收益统计分析图("+ date+").png");
ChartUtilities.writeChartAsJPEG(
fos,
1,
chart,
1400,
800,
null
);
fos.close();
}
private static CategoryDataset getDataSet(int[] num){
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
// dataset.addValue(num[29],"", "-300%以上");
// dataset.addValue(num[28],"","-300%");
// dataset.addValue(num[27], "", "-200%");
// dataset.addValue(num[26], "", "-150%");
// dataset.addValue(num[25],"","-120%");
// dataset.addValue(num[24], "", "-100%");
// dataset.addValue(num[23], "", "-90%");
// dataset.addValue(num[22], "", "-80%");
// dataset.addValue(num[21], "", "-70%");
// dataset.addValue(num[20], "", "-60%");
// dataset.addValue(num[19], "", "-50%");
// dataset.addValue(num[18], "", "-40%");
// dataset.addValue(num[17], "", "-30%");
// dataset.addValue(num[16], "", "-20%");
// dataset.addValue(num[15], "", "-10%");
// dataset.addValue(null, "", "0%");
// dataset.addValue(num[14],"", "10%");
// dataset.addValue(num[13],"","20%");
// dataset.addValue(num[12],"","30%");
// dataset.addValue(num[11], "", "40%");
// dataset.addValue(num[10],"","50%");
// dataset.addValue(num[9], "", "60%");
// dataset.addValue(num[8], "", "70%");
// dataset.addValue(num[7],"","80%");
// dataset.addValue(num[6],"","90%");
// dataset.addValue(num[5],"","100%");
// dataset.addValue(num[4], "", "120%");
// dataset.addValue(num[3], "", "150%");
// dataset.addValue(num[2], "", "200%");
// dataset.addValue(num[1], "", "300%");
// dataset.addValue(num[0],"", "300%以上");
//
dataset.addValue(num[29],"亏损", "-300%以上");
dataset.addValue(num[28],"亏损","-300%");
dataset.addValue(num[27], "亏损", "-200%");
dataset.addValue(num[26], "亏损", "-150%");
dataset.addValue(num[25],"亏损","-120%");
dataset.addValue(num[24], "亏损", "-100%");
dataset.addValue(num[23], "亏损", "-90%");
dataset.addValue(num[22], "亏损", "-80%");
dataset.addValue(num[21], "亏损", "-70%");
dataset.addValue(num[20], "亏损", "-60%");
dataset.addValue(num[19], "亏损", "-50%");
dataset.addValue(num[18], "亏损", "-40%");
dataset.addValue(num[17], "亏损", "-30%");
dataset.addValue(num[16], "亏损", "-20%");
dataset.addValue(num[15], "亏损", "-10%");
dataset.addValue(null, "盈利", "0%");
dataset.addValue(num[14],"盈利", "10%");
dataset.addValue(num[13],"盈利","20%");
dataset.addValue(num[12],"盈利","30%");
dataset.addValue(num[11], "盈利", "40%");
dataset.addValue(num[10],"盈利","50%");
dataset.addValue(num[9], "盈利", "60%");
dataset.addValue(num[8], "盈利", "70%");
dataset.addValue(num[7],"盈利","80%");
dataset.addValue(num[6],"盈利","90%");
dataset.addValue(num[5],"盈利","100%");
dataset.addValue(num[4], "盈利", "120%");
dataset.addValue(num[3], "盈利", "150%");
dataset.addValue(num[2], "盈利", "200%");
dataset.addValue(num[1], "盈利", "300%");
dataset.addValue(num[0],"盈利", "300%以上");
return dataset;
}
}
domainAxis.setUpperMargin(0.01);
domainAxis.setLowerMargin(0.01);好像有类似的的东西
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.Legend;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
”引入上面的jar 包
我把这个
domainAxis.setUpperMargin(0.01);
domainAxis.setLowerMargin(0.01);
好象还是不可以!那位有这方面的经验的
主要原因是横坐标的列太多,导致每一列的位置很小.renderer.setLabelGenerator(new StandardCategoryLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));//12号黑体加粗
renderer.setItemLabelPaint(Color.black);//字体为黑色
renderer.setItemLabelsVisible(true);这里设置数字的时候,数字太大,在柱状的列上显示不完整,所以看到的就是显示不出来,或者有些能显示有些不能显示(这是因为22可以显示,222也可能显示,但是2222因为太宽了,所以就无法显示)有两个办法可以进行调整:
1 尽可能的把横坐标的列调整小一点点,比如我把31列调整到29列.
2 可以通过设置renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));//这个字体的大小,如果字体小点,可能能显示出来不过还有个问题就是如果列的值太小了,比如1,列很小,然后数字也会显示不出来.
这时候如果把数字显示在柱状图的上面就好拉.新的问题:
谁知道怎么把数字显示在柱状图的上面吗?
这个在网上很少看到相关的帖子的.