plugins/base1/se.lu.onk/trunk/OneClass/src/oneclass/plot/Plot.java

Code
Comments
Other
Rev Date Author Line
242 28 Feb 07 enell 1 /*
242 28 Feb 07 enell 2  $Id$
242 28 Feb 07 enell 3
242 28 Feb 07 enell 4  Copyright (C) 2006 Johan Enell
242 28 Feb 07 enell 5
242 28 Feb 07 enell 6  This file is part of BASE - BioArray Software Environment.
242 28 Feb 07 enell 7  Available at http://base.thep.lu.se/
242 28 Feb 07 enell 8
242 28 Feb 07 enell 9  BASE is free software; you can redistribute it and/or modify it
242 28 Feb 07 enell 10  under the terms of the GNU General Public License as published by
242 28 Feb 07 enell 11  the Free Software Foundation; either version 2 of the License, or
242 28 Feb 07 enell 12  (at your option) any later version.
242 28 Feb 07 enell 13
242 28 Feb 07 enell 14  BASE is distributed in the hope that it will be useful, but
242 28 Feb 07 enell 15  WITHOUT ANY WARRANTY; without even the implied warranty of
242 28 Feb 07 enell 16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
242 28 Feb 07 enell 17  General Public License for more details.
242 28 Feb 07 enell 18
242 28 Feb 07 enell 19  You should have received a copy of the GNU General Public License
242 28 Feb 07 enell 20  along with this program; if not, write to the Free Software
242 28 Feb 07 enell 21  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
242 28 Feb 07 enell 22  02111-1307, USA.
242 28 Feb 07 enell 23  */
242 28 Feb 07 enell 24 package oneclass.plot;
242 28 Feb 07 enell 25
242 28 Feb 07 enell 26 import org.jfree.chart.ChartUtilities;
242 28 Feb 07 enell 27 import org.jfree.chart.JFreeChart;
242 28 Feb 07 enell 28 import org.jfree.chart.axis.LogarithmicAxis;
242 28 Feb 07 enell 29 import org.jfree.chart.axis.NumberAxis;
242 28 Feb 07 enell 30 import org.jfree.chart.plot.DatasetRenderingOrder;
242 28 Feb 07 enell 31 import org.jfree.chart.plot.SeriesRenderingOrder;
242 28 Feb 07 enell 32 import org.jfree.chart.plot.XYPlot;
242 28 Feb 07 enell 33 import org.jfree.chart.renderer.xy.XYBarRenderer;
242 28 Feb 07 enell 34 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
242 28 Feb 07 enell 35 import org.jfree.data.RangeType;
242 28 Feb 07 enell 36 import org.jfree.data.function.Function2D;
242 28 Feb 07 enell 37 import org.jfree.data.function.NormalDistributionFunction2D;
242 28 Feb 07 enell 38 import org.jfree.data.general.DatasetUtilities;
242 28 Feb 07 enell 39 import org.jfree.data.xy.XYDataset;
242 28 Feb 07 enell 40 import org.jfree.data.xy.XYSeries;
242 28 Feb 07 enell 41 import org.jfree.data.xy.XYSeriesCollection;
242 28 Feb 07 enell 42
242 28 Feb 07 enell 43 import java.awt.Color;
242 28 Feb 07 enell 44 import java.io.File;
242 28 Feb 07 enell 45 import java.io.IOException;
242 28 Feb 07 enell 46
243 28 Feb 07 enell 47 public class Plot
242 28 Feb 07 enell 48 {
242 28 Feb 07 enell 49
242 28 Feb 07 enell 50   public static void plotOE_FDR(XYSeries observed, XYSeries expected, XYSeries fdr)
242 28 Feb 07 enell 51     throws IOException
242 28 Feb 07 enell 52   {
242 28 Feb 07 enell 53     NumberAxis domainAxis = new LogarithmicAxis("Rank"); // x axis
242 28 Feb 07 enell 54     domainAxis.setAutoRangeIncludesZero(false);
242 28 Feb 07 enell 55     domainAxis.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 56     NumberAxis rangeAxisFDR = new NumberAxis("FDR"); // y axis fdr
242 28 Feb 07 enell 57     rangeAxisFDR.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 58     rangeAxisFDR.setAutoRangeIncludesZero(true);
242 28 Feb 07 enell 59     NumberAxis rangeAxisOE = new NumberAxis("Observed / Expected"); // y axis oe
242 28 Feb 07 enell 60     rangeAxisOE.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 61     rangeAxisOE.setAutoRangeIncludesZero(true);
242 28 Feb 07 enell 62
242 28 Feb 07 enell 63     XYSeriesCollection datasetOE = new XYSeriesCollection();
242 28 Feb 07 enell 64     datasetOE.addSeries(observed);
242 28 Feb 07 enell 65     datasetOE.addSeries(expected);
242 28 Feb 07 enell 66     XYSeriesCollection datasetFDR = new XYSeriesCollection();
242 28 Feb 07 enell 67     datasetFDR.addSeries(fdr);
242 28 Feb 07 enell 68
242 28 Feb 07 enell 69     XYLineAndShapeRenderer oeRenderer = new XYLineAndShapeRenderer(true, false);
242 28 Feb 07 enell 70     oeRenderer.setSeriesPaint(0, Color.RED);
242 28 Feb 07 enell 71     oeRenderer.setSeriesPaint(1, Color.BLUE);
242 28 Feb 07 enell 72     XYLineAndShapeRenderer fdrRenderer = new XYLineAndShapeRenderer(true, false);
242 28 Feb 07 enell 73     fdrRenderer.setSeriesPaint(0, Color.BLACK);
242 28 Feb 07 enell 74
242 28 Feb 07 enell 75     XYPlot plot = new XYPlot();
242 28 Feb 07 enell 76     plot.setDomainAxis(domainAxis);
242 28 Feb 07 enell 77
242 28 Feb 07 enell 78     plot.setDataset(0, datasetOE);
242 28 Feb 07 enell 79     plot.setRangeAxis(0, rangeAxisOE);
242 28 Feb 07 enell 80     plot.mapDatasetToRangeAxis(0, 0);
242 28 Feb 07 enell 81     plot.setRenderer(0, oeRenderer);
242 28 Feb 07 enell 82
242 28 Feb 07 enell 83     plot.setDataset(1, datasetFDR);
242 28 Feb 07 enell 84     plot.setRangeAxis(1, rangeAxisFDR);
242 28 Feb 07 enell 85     plot.mapDatasetToRangeAxis(1, 1);
242 28 Feb 07 enell 86     plot.setRenderer(1, fdrRenderer);
242 28 Feb 07 enell 87
242 28 Feb 07 enell 88     plot.setSeriesRenderingOrder(SeriesRenderingOrder.FORWARD);
242 28 Feb 07 enell 89
242 28 Feb 07 enell 90     JFreeChart chart = new JFreeChart(plot);
242 28 Feb 07 enell 91     chart.setAntiAlias(false);
242 28 Feb 07 enell 92
242 28 Feb 07 enell 93     ChartUtilities.saveChartAsPNG(new File("oe_fdrplot.png"), chart, 800, 600);
242 28 Feb 07 enell 94   }
242 28 Feb 07 enell 95
242 28 Feb 07 enell 96   public static void plotFDR(XYSeries fdr)
242 28 Feb 07 enell 97     throws IOException
242 28 Feb 07 enell 98   {
242 28 Feb 07 enell 99     XYLineAndShapeRenderer fdrRenderer = new XYLineAndShapeRenderer(true, false);
242 28 Feb 07 enell 100     fdrRenderer.setSeriesPaint(0, Color.BLACK);
242 28 Feb 07 enell 101
242 28 Feb 07 enell 102     NumberAxis domainAxis = new LogarithmicAxis("Rank"); // x axis
242 28 Feb 07 enell 103     domainAxis.setAutoRangeIncludesZero(false);
242 28 Feb 07 enell 104     domainAxis.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 105     NumberAxis rangeAxis = new NumberAxis("FDR"); // y axis
242 28 Feb 07 enell 106     rangeAxis.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 107     rangeAxis.setAutoRangeIncludesZero(true);
242 28 Feb 07 enell 108     XYPlot plot = new XYPlot(new XYSeriesCollection(fdr), domainAxis, rangeAxis, fdrRenderer);
242 28 Feb 07 enell 109     plot.setSeriesRenderingOrder(SeriesRenderingOrder.FORWARD);
242 28 Feb 07 enell 110
242 28 Feb 07 enell 111     JFreeChart chart = new JFreeChart(plot);
242 28 Feb 07 enell 112     chart.setAntiAlias(false);
242 28 Feb 07 enell 113     chart.removeLegend();
242 28 Feb 07 enell 114
242 28 Feb 07 enell 115     ChartUtilities.saveChartAsPNG(new File("fdrplot.png"), chart, 800, 600);
242 28 Feb 07 enell 116   }
242 28 Feb 07 enell 117   
242 28 Feb 07 enell 118
242 28 Feb 07 enell 119   public static void plotOE(XYSeries observed, XYSeries expected)
242 28 Feb 07 enell 120     throws IOException
242 28 Feb 07 enell 121   {
242 28 Feb 07 enell 122     XYSeriesCollection allSeries = new XYSeriesCollection();
242 28 Feb 07 enell 123     allSeries.addSeries(observed);
242 28 Feb 07 enell 124     allSeries.addSeries(expected);
242 28 Feb 07 enell 125
242 28 Feb 07 enell 126     XYLineAndShapeRenderer oeRenderer = new XYLineAndShapeRenderer(true, false);
242 28 Feb 07 enell 127     oeRenderer.setSeriesPaint(0, Color.RED);
242 28 Feb 07 enell 128     oeRenderer.setSeriesPaint(1, Color.BLUE);
242 28 Feb 07 enell 129
242 28 Feb 07 enell 130     NumberAxis domainAxis = new LogarithmicAxis("Rank"); // x axis
242 28 Feb 07 enell 131     domainAxis.setAutoRangeIncludesZero(false);
242 28 Feb 07 enell 132     domainAxis.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 133     NumberAxis rangeAxis = new NumberAxis(); // y axis
242 28 Feb 07 enell 134     rangeAxis.setRangeType(RangeType.POSITIVE);
242 28 Feb 07 enell 135     rangeAxis.setAutoRangeIncludesZero(true);
242 28 Feb 07 enell 136     XYPlot plot = new XYPlot(allSeries, domainAxis, rangeAxis, oeRenderer);
242 28 Feb 07 enell 137     plot.setSeriesRenderingOrder(SeriesRenderingOrder.FORWARD);
242 28 Feb 07 enell 138
242 28 Feb 07 enell 139     JFreeChart chart = new JFreeChart(plot);
242 28 Feb 07 enell 140     chart.setAntiAlias(false);
242 28 Feb 07 enell 141
242 28 Feb 07 enell 142     ChartUtilities.saveChartAsPNG(new File("oeplot.png"), chart, 800, 600);
242 28 Feb 07 enell 143   }
242 28 Feb 07 enell 144
242 28 Feb 07 enell 145   public static void plotMHist(HistogramDataset m, double mean, double sd)
242 28 Feb 07 enell 146     throws IOException
242 28 Feb 07 enell 147   {
242 28 Feb 07 enell 148     if (m.getItemCount(0) == 0)
242 28 Feb 07 enell 149     {
242 28 Feb 07 enell 150       System.err.println("Can't print histogram. Dataset empty.");
242 28 Feb 07 enell 151       return;
242 28 Feb 07 enell 152     }
242 28 Feb 07 enell 153     
242 28 Feb 07 enell 154     NumberAxis domainAxis = new NumberAxis("M, log2(int1/int2)");
242 28 Feb 07 enell 155     NumberAxis rangeAxis1 = new NumberAxis("Frequence");
242 28 Feb 07 enell 156     NumberAxis rangeAxis2 = new NumberAxis("Normsdist");
242 28 Feb 07 enell 157     rangeAxis1.setAutoRangeIncludesZero(true);
242 28 Feb 07 enell 158
242 28 Feb 07 enell 159     XYBarRenderer hRenderer = new XYBarRenderer();
242 28 Feb 07 enell 160     XYLineAndShapeRenderer ndRenderer = new XYLineAndShapeRenderer(true, false);
242 28 Feb 07 enell 161
242 28 Feb 07 enell 162     XYPlot plot = new XYPlot();
242 28 Feb 07 enell 163     plot.setDomainAxis(domainAxis);
242 28 Feb 07 enell 164     plot.setRangeAxis(0, rangeAxis1);
242 28 Feb 07 enell 165     plot.setRangeAxis(1, rangeAxis2);
242 28 Feb 07 enell 166     plot.mapDatasetToRangeAxis(0, 0);
242 28 Feb 07 enell 167     plot.mapDatasetToRangeAxis(1, 1);
242 28 Feb 07 enell 168     
242 28 Feb 07 enell 169     plot.setDataset(0, m);
242 28 Feb 07 enell 170     plot.setRenderer(0, hRenderer);
242 28 Feb 07 enell 171     
242 28 Feb 07 enell 172     double start = Math.floor(m.getStartXValue(0, 0));
242 28 Feb 07 enell 173     double end = Math.ceil(m.getEndXValue(0, m.getItemCount(0) - 1));
242 28 Feb 07 enell 174     Function2D dist = new NormalDistributionFunction2D(mean, sd);
242 28 Feb 07 enell 175     XYDataset normsdist = DatasetUtilities.sampleFunction2D(dist, start, end, (int)((end - start)/m.getBinSize()), "Normsdist"); 
242 28 Feb 07 enell 176     plot.setDataset(1, normsdist);
242 28 Feb 07 enell 177     plot.setRenderer(1, ndRenderer);
242 28 Feb 07 enell 178
242 28 Feb 07 enell 179     plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
242 28 Feb 07 enell 180     
242 28 Feb 07 enell 181     JFreeChart chart = new JFreeChart(plot);
242 28 Feb 07 enell 182     chart.setAntiAlias(false);
242 28 Feb 07 enell 183
242 28 Feb 07 enell 184     ChartUtilities.saveChartAsPNG(new File("mhist.png"), chart, 800, 600);
242 28 Feb 07 enell 185   }
242 28 Feb 07 enell 186 }