/* * NodeHeightBoxPlot.java * * Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST 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 * of the License, or (at your option) any later version. * * BEAST 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 BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package dr.app.gui.tree; import dr.evolution.tree.Tree; import dr.evolution.tree.NodeRef; import java.awt.*; import java.awt.geom.Rectangle2D; import java.awt.geom.Line2D; /** * Created by IntelliJ IDEA. * User: alexei * Date: Dec 3, 2004 * Time: 10:09:18 AM * To change this template use File | Settings | File Templates. */ public class NodeHeightBoxPlot implements NodeDecorator { public NodeHeightBoxPlot() { this(new BasicStroke(1.0f), new BasicStroke(0.5f), true); } public NodeHeightBoxPlot(Stroke lineStroke, Stroke whiskerStroke, boolean fill) { this.lineStroke = lineStroke; this.whiskerStroke = whiskerStroke; this.fill = fill; } public boolean isDecoratable(Tree tree, NodeRef node) { return false; //To change body of implemented methods use File | Settings | File Templates. } public void decorateNode(Tree tree, NodeRef node, Graphics2D g2, CoordinateTransform transform) { // look for node height statistics Double mean = (Double)tree.getNodeAttribute(node, "nodeHeight.mean"); if (mean != null) { Double hpdUpper = (Double)tree.getNodeAttribute(node, "nodeHeight.hpdUpper"); Double hpdLower = (Double)tree.getNodeAttribute(node, "nodeHeight.hpdLower"); Double min = (Double)tree.getNodeAttribute(node, "nodeHeight.min"); Double max = (Double)tree.getNodeAttribute(node, "nodeHeight.max"); // plot height statistics as box plot double meanX = transform.xCoordinate(mean.doubleValue()); double minX = transform.xCoordinate(min.doubleValue()); double maxX = transform.xCoordinate(max.doubleValue()); double upperX = transform.xCoordinate(hpdUpper.doubleValue()); double lowerX = transform.xCoordinate(hpdLower.doubleValue()); //System.out.println(upperX + " " + lowerX); double y = transform.yCoordinate(tree, node); g2.setStroke(lineStroke); if (fill) { g2.setColor(Color.white); g2.fill(new Rectangle2D.Double(upperX, y-5,lowerX-upperX,10)); } g2.setColor(Color.gray); g2.draw(new Rectangle2D.Double(upperX, y-5,lowerX-upperX,10)); g2.draw(new Line2D.Double(meanX, y-5,meanX,y+5)); g2.setStroke(whiskerStroke); g2.draw(new Line2D.Double(lowerX, y,minX,y)); g2.draw(new Line2D.Double(maxX, y,upperX,y)); } } Stroke lineStroke = new BasicStroke(1.0f); Stroke whiskerStroke = new BasicStroke(0.5f); boolean fill = true; }