/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program 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 * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.gui.plotter.charts; import com.rapidminer.datatable.DataTable; import com.rapidminer.gui.plotter.ColorProvider; import com.rapidminer.gui.plotter.PlotterConfigurationModel; import java.awt.Paint; import org.jfree.chart.renderer.PaintScale; import org.jfree.chart.renderer.xy.AbstractXYItemRenderer; import org.jfree.chart.renderer.xy.XYBlockRenderer; import org.jfree.ui.RectangleAnchor; /** * This is the block chart plotter based on JFreeChart. * * @author Ingo Mierswa */ public class BlockChartPlotter extends Abstract2DChartPlotter { public BlockChartPlotter(PlotterConfigurationModel settings, DataTable dataTable) { super(settings, dataTable); } public BlockChartPlotter(PlotterConfigurationModel settings) { super(settings); } private static final long serialVersionUID = -5231467872475202473L; public static class BlockPaintScale implements PaintScale { private ColorProvider colorProvider = new ColorProvider(true); private double minColor; private double maxColor; public BlockPaintScale(double minColor, double maxColor) { this.minColor = minColor; this.maxColor = maxColor; } @Override public Paint getPaint(double z) { double normalized = (z - minColor) / (maxColor - minColor); return colorProvider.getPointColor(normalized); /* * float z01 = (float) z / 198 ; * * float B = 1; * * float S = (float) Math.max(0.1, Math.abs(2*z01 - 1) ); * * float hRed = 0.0f; float hBlue = 0.7f; float H = hBlue - z01*(hBlue-hRed); * * // get HSB color, no transparency Color c = Color.getHSBColor( H,S,B ); * * // adjust transparency here: try 150 instead of 255 // will lead to same grid effect * return new Color(c.getRed(),c.getGreen(),c.getBlue(), 255); */ } @Override public double getUpperBound() { return maxColor; } @Override public double getLowerBound() { return minColor; } } @Override public AbstractXYItemRenderer getItemRenderer(boolean nominal, int size, double minColor, double maxColor) { XYBlockRenderer renderer = new XYBlockRenderer(); renderer.setPaintScale(new BlockPaintScale(minColor, maxColor)); renderer.setBlockAnchor(RectangleAnchor.CENTER); // if Block dimension is increased (e.g 1.2x1.2), the grid effect gets bigger // so it could be that blocks are overlapping a little // but if Block dimension is decreased (e.g. 0.9x0.9), each rectangle seems to have // a less-transparent border (you have to zoom-in to notice), and that could be the cause of // the grid effect. // renderer.setBlockHeight(1.0); // renderer.setBlockWidth(1.0); return renderer; } @Override public String getPlotterName() { return PlotterConfigurationModel.BLOCK_PLOT; } }