/*
Copyright 2011 Gephi
Authors : Sebastien Heymann <seb@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
Gephi 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.
Gephi 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 Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.statistics.plugin;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import org.gephi.utils.TempDirUtils;
import org.gephi.utils.TempDirUtils.TempDir;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
/**
*
* @author sebastien
*/
public abstract class ChartUtils {
public static void decorateChart(JFreeChart chart) {
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, false);
renderer.setSeriesShapesVisible(0, true);
renderer.setSeriesShape(0, new java.awt.geom.Ellipse2D.Double(0, 0, 2, 2));
plot.setBackgroundPaint(java.awt.Color.WHITE);
plot.setDomainGridlinePaint(java.awt.Color.GRAY);
plot.setRangeGridlinePaint(java.awt.Color.GRAY);
plot.setRenderer(renderer);
}
public static void scaleChart(JFreeChart chart, XYSeries dSeries, boolean normalized) {
XYPlot plot = (XYPlot) chart.getPlot();
ValueAxis domainAxis = plot.getDomainAxis();
domainAxis.setLowerMargin(1.0);
domainAxis.setUpperMargin(1.0);
domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
if (normalized) {
domainAxis.setRange(-0.05, 1.05);
} else {
domainAxis.setRange(dSeries.getMinX() - 1, dSeries.getMaxX() + 1);
}
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setRange(-1, dSeries.getMaxY() + 0.1 * dSeries.getMaxY());
}
public static String renderChart(JFreeChart chart, String fileName) {
String imageFile = "";
try {
final ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
TempDir tempDir = TempDirUtils.createTempDir();
File file1 = tempDir.createFile(fileName);
imageFile = "<IMG SRC=\"file:" + file1.getAbsolutePath() + "\" " + "WIDTH=\"600\" HEIGHT=\"400\" BORDER=\"0\" USEMAP=\"#chart\"></IMG>";
ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, info);
} catch (IOException e) {
System.out.println(e.toString());
}
return imageFile;
}
public static XYSeries createXYSeries(Map data, String name) {
XYSeries series = new XYSeries(name);
for (Iterator it = data.entrySet().iterator(); it.hasNext();) {
Map.Entry d = (Map.Entry) it.next();
Number x = (Number) d.getKey();
Number y = (Number) d.getValue();
series.add(x, y);
}
return series;
}
}