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;
    }
}

解决方案 »

  1.   

    上面的边界你给的太少了吧!具体怎么设置我也不记得了。
        domainAxis.setUpperMargin(0.01);
        domainAxis.setLowerMargin(0.01);好像有类似的的东西
      

  2.   

    import org.jfree.chart.ChartFactory;我运行时 说这些包不存在, 需要去手动下载这些包吗
      

  3.   

    重新加载下工程“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; 
    ”引入上面的jar 包
      

  4.   

    帮看看,
    我把这个
    domainAxis.setUpperMargin(0.01); 
    domainAxis.setLowerMargin(0.01); 
    好象还是不可以!那位有这方面的经验的
      

  5.   

    java好强大,楼主好强大,还没有接触这方面,真羡慕!!!
      

  6.   

    哎呀,没有一个人说到点子上.
    主要原因是横坐标的列太多,导致每一列的位置很小.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,列很小,然后数字也会显示不出来.
    这时候如果把数字显示在柱状图的上面就好拉.新的问题:
    谁知道怎么把数字显示在柱状图的上面吗?
    这个在网上很少看到相关的帖子的.