⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logaxis.java

📁 java图形利器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* =========================================================== * JFreeChart : a free chart library for the Java(tm) platform * =========================================================== * * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors. * * Project Info:  http://www.jfree.org/jfreechart/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,  * USA.   * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ------------ * LogAxis.java * ------------ * (C) Copyright 2006, 2007, by Object Refinery Limited and Contributors. * * Original Author:  David Gilbert (for Object Refinery Limited); * Contributor(s):   -; * * $Id: LogAxis.java,v 1.1.2.2 2007/03/22 16:39:18 mungady Exp $ * * Changes * ------- * 24-Aug-2006 : Version 1 (DG); * 22-Mar-2007 : Use defaultAutoArrange attribute (DG); * */package org.jfree.experimental.chart.axis;import java.awt.Graphics2D;import java.awt.geom.Rectangle2D;import java.text.NumberFormat;import java.util.ArrayList;import java.util.List;import org.jfree.chart.axis.AxisState;import org.jfree.chart.axis.LogarithmicAxis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.NumberTick;import org.jfree.chart.axis.NumberTickUnit;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.event.AxisChangeEvent;import org.jfree.chart.plot.Plot;import org.jfree.chart.plot.PlotRenderingInfo;import org.jfree.chart.plot.ValueAxisPlot;import org.jfree.data.Range;import org.jfree.ui.RectangleEdge;import org.jfree.ui.TextAnchor;/** * A numerical axis that uses a logarithmic scale.  The plan is for this class * to replace the {@link LogarithmicAxis} class. *  * WARNING: THIS CLASS IS NOT PART OF THE STANDARD JFREECHART API AND IS  * SUBJECT TO ALTERATION OR REMOVAL.  DO NOT RELY ON THIS CLASS FOR  * PRODUCTION USE.  Please experiment with this code and provide feedback. */// TODO: support for margins that get inherited from ValueAxis// TODO: add auto tick unit selection// TODO: number formatting options// TODO: write JUnit testspublic class LogAxis extends ValueAxis {    /** The logarithm base. */    private double base = 10.0;        /** The logarithm of the base value - cached for performance. */    private double baseLog = Math.log(10.0);        /**  The smallest value permitted on the axis. */    private double smallestValue = 1E-100;        /** The current tick unit. */    private NumberTickUnit tickUnit;        /** The override number format. */    private NumberFormat numberFormatOverride;    /** The number of minor ticks per major tick unit. */    private int minorTickCount;         /**     * Creates a new <code>LogAxis</code> with no label.     */    public LogAxis() {        this(null);        }        /**     * Creates a new <code>LogAxis</code> with the given label.     *      * @param label  the axis label (<code>null</code> permitted).     */    public LogAxis(String label) {        super(label, NumberAxis.createIntegerTickUnits());        setDefaultAutoRange(new Range(0.01, 1.0));        this.tickUnit = new NumberTickUnit(1.0);        this.minorTickCount = 10;        this.setTickMarksVisible(false);    }        /**     * Returns the base for the logarithm calculation.     *      * @return The base for the logarithm calculation.     */    public double getBase() {        return this.base;    }        /**     * Sets the base for the logarithm calculation and sends an      * {@link AxisChangeEvent} to all registered listeners.     *      * @param base  the base value (must be > 1.0).     */    public void setBase(double base) {        if (base <= 1.0) {            throw new IllegalArgumentException("Requires 'base' > 1.0.");        }        this.base = base;        this.baseLog = Math.log(base);        notifyListeners(new AxisChangeEvent(this));    }        /**     * Returns the smallest value represented by the axis.     *      * @return The smallest value represented by the axis.     */    public double getSmallestValue() {        return this.smallestValue;    }        /**     * Sets the smallest value represented by the axis.     *      * @param value  the value.     */    public void setSmallestValue(double value) {        if (value <= 0.0) {            throw new IllegalArgumentException("Requires 'value' > 0.0.");        }        this.smallestValue = value;    }        /**     * Returns the current tick unit.     *      * @return The current tick unit.     */    public NumberTickUnit getTickUnit() {        return this.tickUnit;    }        /**     * Sets the tick unit for the axis and sends an {@link AxisChangeEvent} to      * all registered listeners.  A side effect of calling this method is that     * the "auto-select" feature for tick units is switched off (you can      * restore it using the {@link ValueAxis#setAutoTickUnitSelection(boolean)}     * method).     *     * @param unit  the new tick unit (<code>null</code> not permitted).     */    public void setTickUnit(NumberTickUnit unit) {        // defer argument checking...        setTickUnit(unit, true, true);    }    /**     * Sets the tick unit for the axis and, if requested, sends an      * {@link AxisChangeEvent} to all registered listeners.  In addition, an      * option is provided to turn off the "auto-select" feature for tick units      * (you can restore it using the      * {@link ValueAxis#setAutoTickUnitSelection(boolean)} method).     *     * @param unit  the new tick unit (<code>null</code> not permitted).     * @param notify  notify listeners?     * @param turnOffAutoSelect  turn off the auto-tick selection?     */    public void setTickUnit(NumberTickUnit unit, boolean notify,                             boolean turnOffAutoSelect) {        if (unit == null) {            throw new IllegalArgumentException("Null 'unit' argument.");           }        this.tickUnit = unit;        if (turnOffAutoSelect) {            setAutoTickUnitSelection(false, false);        }        if (notify) {            notifyListeners(new AxisChangeEvent(this));        }    }        /**     * Returns the number format override.  If this is non-null, then it will      * be used to format the numbers on the axis.     *     * @return The number formatter (possibly <code>null</code>).     */    public NumberFormat getNumberFormatOverride() {        return this.numberFormatOverride;    }    /**     * Sets the number format override.  If this is non-null, then it will be      * used to format the numbers on the axis.     *     * @param formatter  the number formatter (<code>null</code> permitted).     */    public void setNumberFormatOverride(NumberFormat formatter) {        this.numberFormatOverride = formatter;        notifyListeners(new AxisChangeEvent(this));    }    /**     * Returns the number of minor tick marks to display.     *      * @return The number of minor tick marks to display.     */    public int getMinorTickCount() {        return this.minorTickCount;    }        /**     * Sets the number of minor tick marks to display.     *      * @param count  the count.     */    public void setMinorTickCount(int count) {        if (count <= 0) {            throw new IllegalArgumentException("Requires 'count' > 0.");        }        this.minorTickCount = count;        notifyListeners(new AxisChangeEvent(this));    }        /**     * Calculates the log of the given value, using the current base.     *      * @param value  the value.     *      * @return The log of the given value.     *      * @see #getBase()     */    public double calculateLog(double value) {        return Math.log(value) / this.baseLog;      }        /**     * Calculates the value from a given log.     *      * @param log  the log value (must be > 0.0).     *      * @return The value with the given log.     */    public double calculateValue(double log) {        return Math.pow(this.base, log);    }        /**     * Converts a Java2D coordinate to an axis value, assuming that the

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -