收录日期:2020/02/20 20:20:58 时间:2016/07/15 11:38:30 标签:Java SE
我希望
如果数据全0那0坐标还能在xy轴交界处,而不是水平显示全0数据,还是在最下面显示!不知道应该怎么修改啊


/* ------------------
 * BarChartDemo4.java
 * ------------------
 * (C) Copyright 2003-2005, by Object Refinery Limited.
 *
 */



import java.awt.Color;
import java.awt.GradientPaint;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * A bar chart with only two bars - here the 'maxBarWidth' attribute in the 
 * renderer prevents the bars from getting too wide.
 */
public class BarChartDemo4 extends ApplicationFrame {

    /**
     * Creates a new demo instance.
     *
     * @param title  the frame title.
     */
    public BarChartDemo4(String title) {

        super(title);

        CategoryDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);

    }

    /**
     * Returns a sample dataset.
     * 
     * @return The dataset.
     */
    private static CategoryDataset createDataset() {
        
        // row keys...
        String series1 = "First";
    

        // column keys...
        String category1 = "Category 1";
        String category2 = "Category 2";
        // create the dataset...
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(0, series1, category1);
        dataset.addValue(0, series1, category2);
        
        return dataset;
        
    }
    
    /**
     * Creates a sample chart.
     * 
     * @param dataset  the dataset.
     * 
     * @return The chart.
     */
    private static JFreeChart createChart(CategoryDataset dataset) {
        
        // create the chart...
        JFreeChart chart = ChartFactory.createBarChart3D(
            "Bar Chart Demo",         // chart title
            "Category",               // domain axis label
            "Value",                  // range axis label
            dataset,                  // data
            PlotOrientation.VERTICAL,
            true,                     // include legend
            true,                     // tooltips?
            false                     // URLs?
        );

        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

        // set the background color for the chart...
        chart.setBackgroundPaint(new Color(0xBBBBDD));

        // get a reference to the plot for further customisation...
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        
        // set the range axis to display integers only...
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        // disable bar outlines...
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);
        renderer.setMaximumBarWidth(0.10);
        
        // set up gradient paints for series...
        GradientPaint gp0 = new GradientPaint(
            0.0f, 0.0f, Color.blue, 
            0.0f, 0.0f, Color.lightGray
        );
        GradientPaint gp1 = new GradientPaint(
            0.0f, 0.0f, Color.green, 
            0.0f, 0.0f, Color.lightGray
        );
        renderer.setSeriesPaint(0, gp0);
        renderer.setSeriesPaint(1, gp1);
        
        
        
        rangeAxis.setAutoTickUnitSelection(false);   
//        NumberTickUnit   nt=   new   NumberTickUnit(0);   
//        rangeAxis.setTickUnit(nt);   
//        
        
//        rangeAxis.setFixedAutoRange(0);
        
        // OPTIONAL CUSTOMISATION COMPLETED.
        
        return chart;
        
    }
    
    /**
     * Creates a panel for the demo (used by SuperDemo.java).
     * 
     * @return A panel.
     */
    public static JPanel createDemoPanel() {
        JFreeChart chart = createChart(createDataset());
        return new ChartPanel(chart);
    }
    
    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {

        BarChartDemo4 demo = new BarChartDemo4("Bar Chart Demo 4");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }

}

数学上(0,0)是xy交界点。
现在的数据更类似于:(0,0),(1,0),(2,0),(3,0)连起来当然是水平线了。
该回复于2009-08-12 23:20:58被版主删除
rangeAxis.setLowerBound(0.0);
引用 3 楼 zhouzongjiu 的回复:
rangeAxis.setLowerBound(0.0);

确实可以啊,但是能不能在聪明一点啊,就是当所有数据是0的时候自动设置成rangeAxis.setLowerBound(0.0);
并且
rangeAxis.setUpperBound(10.0);
否则虽然是0,0的柱子还是显示的很高!
引用 3 楼 zhouzongjiu 的回复:
rangeAxis.setLowerBound(0.0);

确实可以啊,但是能不能在聪明一点啊,就是当所有数据是0的时候自动设置成rangeAxis.setLowerBound(0.0); 
并且 
rangeAxis.setUpperBound(10.0); 
否则虽然是0,0的柱子还是显示的很高!
引用 3 楼 zhouzongjiu 的回复:
rangeAxis.setLowerBound(0.0);

确实可以啊,但是能不能在聪明一点啊,就是当所有数据是0的时候自动设置成rangeAxis.setLowerBound(0.0); 
并且 
rangeAxis.setUpperBound(10.0); 
否则虽然是0,0的柱子还是显示的很高!
引用 5 楼 girl55 的回复:
引用 3 楼 zhouzongjiu 的回复:
rangeAxis.setLowerBound(0.0);

确实可以啊,但是能不能在聪明一点啊,就是当所有数据是0的时候自动设置成rangeAxis.setLowerBound(0.0);
并且
rangeAxis.setUpperBound(10.0);
否则虽然是0,0的柱子还是显示的很高!

暂时还没发现
是不够灵活,用了就这样的感觉了,
在后台定好刻度,根据参数动态生成chart啊,很好用哦
numberaxis.setRange(0.0, maximum);

maximum就是你后台定的参数。

关于Access 数据库 INSERT 问题 请教一个关于缓冲区的问题 独特的父亲 如何在已做好的程序中添加Socket 在windows2000下,如何以命令来关闭进程???!! 我不知道为什么?是我的无知,还是bug? 如何实现OICQ的集群发送功能? delphi里如何提取后台SQL SERVER数据库的系统时间 有关属性编辑器的问题: 请public和LXFY来取分 请教大家一个问题,如何针8进制转换成2进制 一个关于JFrame的问题 递归中出现的问题,请高手帮忙 IIS与tomcat结合找不到服务器,为什么? 关于ActiveX控件图标的制作 我现在已经基本学会了C#的语法,请问接下去该如果学习比较好? 请问