JfreeChart实现了一年12个月柱状图每月一列柱子,现在是要实现每个月后面还得加3列柱状,一个月总共就是4列柱状。
JfreeChart实现了一年12个月饼状每月一小块,现在是要实现每个月里面用颜色分开4种颜色的小块,可以用参数1,2,3,4分别代表一种颜色。
答到边的都有分
因为之前发帖的时候,碰上维修,发出6个帖子,没人回答,又不好结贴,如果这个问题回答正确的话,其它6个贴的分全送上,只要到其它铁回复一句,总120分加上这里的分。

解决方案 »

  1.   

    JfreeChart 包里面有例子 你看没看啊
      

  2.   

    我还是比较喜欢用ChartDirector画图。 http://hi.csdn.net/attachment/201107/21/117713_1311211181TTNt.jpg比如这样。。
      

  3.   

    呵呵
    大胡子 老师来啦!上次做甘特图也是你指导了一下,但是现在的项目是在以前有的jfreechart上做,要统一,所以只能用jfreechart。
      

  4.   


    呃,那帮不上了。哈哈,这个东西,我用不来,甚至说从来没有去尝试过去他。我刚了一下你的贴子,确实是之前帮你回过。那个API 上次自己试了吧,应该比较容易上手吧。
    其实吧我有个建议就是:  整改。  画图改起来也挺容易,如果时间允许的,就都改成用我这个。反正你纠结在这个问题上也不是一会能解决的。
      

  5.   


    /**
     * 设置一个通用的主题并设置字体避免乱码
     * 
     * @return
     */
    private static StandardChartTheme getTheme() {
    StandardChartTheme theme = new StandardChartTheme("unicode");
    theme.setExtraLargeFont(new Font("微软雅黑", Font.BOLD, 15));
    theme.setLargeFont(new Font("微软雅黑", Font.PLAIN, 15));
    theme.setRegularFont(new Font("微软雅黑", Font.PLAIN, 12));
    return theme;
    } /**
     * 生成柱状图
     * 
     * @param title标题
     * @param domainAxisLabel横轴的标签
     * @param rangeAxisLabel纵轴的标签
     * @param dataSet
     *            数据集
     * 
     *            DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     *            dataset.addValue(1.0, "Row 1", "Column 1");
     *            dataset.addValue(5.0, "Row 1", "Column 2");
     *            dataset.addValue(3.0, "Row 1", "Column 3");
     *            dataset.addValue(2.0, "Row 2", "Column 1");
     *            dataset.addValue(3.0, "Row 2", "Column 2");
     *            dataset.addValue(2.0, "Row 2", "Column 3");
     * 
     * @return 可操作的JFreeChart对象
     */
    public static JFreeChart getBarChart(String title, String domainAxisLabel,
    String rangeAxisLabel, DefaultCategoryDataset dataSet) {
    ChartFactory.setChartTheme(getTheme());
    JFreeChart chart = ChartFactory.createBarChart(title, domainAxisLabel,
    rangeAxisLabel, dataSet, PlotOrientation.VERTICAL, true, true,
    false);
    chart.setBackgroundPaint(Color.WHITE);
    chart.setBorderVisible(true);
    chart.setBorderPaint(Color.GRAY); CategoryPlot plot = (CategoryPlot) chart.getPlot();
    plot.setBackgroundPaint(Color.WHITE); NumberAxis axis = (NumberAxis) plot.getRangeAxis();
    axis.setUpperMargin(0.2D);
    axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    CategoryAxis categoryaxis = plot.getDomainAxis();
    categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
    plot.setRangeGridlinePaint(Color.BLUE); BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setItemMargin(0.0);
    renderer.setDrawBarOutline(false);
    renderer.setShadowVisible(false);
    // LegendTitle legend = chart.getLegend();
    // legend.setBorder(0.0D, 0.0D, 0.0D, 0.0D);
    // legend.setItemLabelPadding(new RectangleInsets(0D, 0D, 0D, 20D));
    return chart;
    } /**
     * 生成折线图
     * 
     * @param title标题
     * @param domainAxisLabel横轴的标签
     * @param rangeAxisLabel纵轴的标签
     * @param dataSet
     *            数据集
     * 
     *            DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     *            dataset.addValue(212, "Classes", "JDK 1.0");
     *            dataset.addValue(504, "Classes", "JDK 1.1");
     *            dataset.addValue(1520, "Classes", "SDK 1.2");
     *            dataset.addValue(1842, "Classes", "SDK 1.3");
     *            dataset.addValue(2991, "Classes", "SDK 1.4");
     * 
     * @return 可操作的JFreeChart对象
     */
    public static JFreeChart getLineChart(String title, String domainAxisLabel,
    String rangeAxisLabel, DefaultCategoryDataset dataSet) { ChartFactory.setChartTheme(getTheme());
    JFreeChart chart = ChartFactory.createLineChart(title, domainAxisLabel,
    rangeAxisLabel, dataSet, PlotOrientation.VERTICAL, true, true,
    false);
    chart.setBackgroundPaint(Color.WHITE);
    chart.setBorderVisible(true);
    chart.setBorderPaint(Color.GRAY);
    CategoryPlot plot = (CategoryPlot) chart.getPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setRangeGridlinePaint(Color.white);
    CategoryAxis categoryaxis = plot.getDomainAxis();
    categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
    .getRenderer();
    renderer.setBaseShapesVisible(true); return chart;
    } /**
     * 生成带有折线图的柱状图
     * 
     * @param title标题
     * @param domainAxisLabel横轴标签
     * @param rangeAxisLabel纵轴标签
     * @param bardataSet
     *            柱状图的数据集
     * 
     *            DefaultCategoryDataset bardataSet = new
     *            DefaultCategoryDataset(); bardataSet.addValue(1.0, "Row 1",
     *            "Column 1"); bardataSet.addValue(5.0, "Row 1", "Column 2");
     *            bardataSet.addValue(3.0, "Row 1", "Column 3");
     *            bardataSet.addValue(2.0, "Row 2", "Column 1");
     *            bardataSet.addValue(3.0, "Row 2", "Column 2");
     *            bardataSet.addValue(2.0, "Row 2", "Column 3");
     * 
     * @param linedataSet
     *            折线图的数据集
     * 
     *            DefaultCategoryDataset linedataSet = new
     *            DefaultCategoryDataset(); linedataSet.addValue(1.0, "point",
     *            "Column 1"); linedataSet.addValue(5.0, "point", "Column 2");
     *            linedataSet.addValue(3.0, "point", "Column 3");
     * 
     * @return 可操作的JFreeChart对象
     */
    public static JFreeChart getBarAndLineChart(String title, String domainAxisLabel,
    String rangeAxisLabel, DefaultCategoryDataset bardataSet,
    DefaultCategoryDataset linedataSet) { ChartFactory.setChartTheme(getTheme());
    JFreeChart chart = ChartFactory.createBarChart(title, domainAxisLabel,
    rangeAxisLabel, bardataSet, PlotOrientation.VERTICAL, true,
    true, false); chart.setBackgroundPaint(Color.WHITE);
    chart.setBorderVisible(true);
    chart.setBorderPaint(Color.GRAY);
    chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
    RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);// CategoryPlot plot = (CategoryPlot) chart.getPlot();
    plot.setBackgroundPaint(Color.WHITE); NumberAxis axis = (NumberAxis) plot.getRangeAxis();
    axis.setUpperMargin(0.2D);
    axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    CategoryAxis categoryaxis = plot.getDomainAxis();
    // categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
    categoryaxis.setLowerMargin(0D);
    categoryaxis.setUpperMargin(0D);
    plot.setRangeGridlinePaint(Color.BLUE);
    plot.setDomainGridlinePaint(Color.WHITE); BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setItemMargin(0.0);
    renderer.setDrawBarOutline(false);
    renderer.setShadowVisible(false);
    plot.setDataset(1, linedataSet); NumberAxis numberaxis = new NumberAxis(null);
    numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    plot.setRangeAxis(1, numberaxis); plot.mapDatasetToRangeAxis(1, 1); LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
    plot.setRenderer(1, lineandshaperenderer);
    plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); LegendTitle legend = chart.getLegend();
    legend.setItemLabelPadding(new RectangleInsets(0D, 0D, 0D, 20D)); return chart;
    }
      

  6.   


    /**
     * 生成饼图
     * 
     * @param title标题
     * @param dataSet数据集
     * 
     *            DefaultPieDataset dataset = new DefaultPieDataset();
     *            dataset.setValue("Category 1", 43.2);
     *            dataset.setValue("Category 2", 27.9);
     *            dataset.setValue("Category 3", 79.5);
     * 
     * @return 可操作的JFreeChart对象
     */
    public static JFreeChart getPieChart(String title, DefaultPieDataset dataSet) {
    ChartFactory.setChartTheme(getTheme());
    JFreeChart chart = ChartFactory.createPieChart(title, dataSet, true,
    true, false); PiePlot plot = (PiePlot) chart.getPlot();
    plot.setSectionOutlinesVisible(false); chart.setBackgroundPaint(Color.WHITE);
    chart.setBorderVisible(true);
    chart.setBorderPaint(Color.GRAY); return chart;
    }