4,26 → 4,32 |
import org.jfree.chart.ChartRenderingInfo; |
import org.jfree.chart.ChartUtilities; |
import org.jfree.chart.JFreeChart; |
import org.jfree.chart.axis.DateAxis; |
import org.jfree.chart.axis.DateTickMarkPosition; |
import org.jfree.chart.axis.NumberAxis; |
import org.jfree.chart.entity.StandardEntityCollection; |
import org.jfree.chart.labels.CategoryToolTipGenerator; |
import org.jfree.chart.labels.ItemLabelAnchor; |
import org.jfree.chart.labels.ItemLabelPosition; |
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; |
import org.jfree.chart.labels.*; |
import org.jfree.chart.plot.*; |
import org.jfree.chart.renderer.category.BarRenderer; |
import org.jfree.chart.renderer.xy.XYDifferenceRenderer; |
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; |
import org.jfree.chart.title.TextTitle; |
import org.jfree.chart.title.Title; |
import org.jfree.data.category.CategoryDataset; |
import org.jfree.data.category.DefaultCategoryDataset; |
import org.jfree.data.general.DefaultPieDataset; |
import org.jfree.data.general.DefaultValueDataset; |
import org.jfree.data.time.Second; |
import org.jfree.data.time.TimeSeries; |
import org.jfree.data.time.TimeSeriesCollection; |
import org.jfree.data.xy.XYDataset; |
import org.jfree.ui.HorizontalAlignment; |
import org.jfree.ui.TextAnchor; |
import org.jfree.util.ShapeUtilities; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.services.questionarios.pedagogico.QuestionariosReport; |
import pt.estgp.estgweb.services.questionarios.pedagogico.DocenteReport; |
import pt.estgp.estgweb.services.questionarios.pedagogico.QuestionariosAlunosReport; |
import pt.estgp.estgweb.services.questionarios.pedagogico.QuestionariosReport; |
|
import javax.imageio.ImageIO; |
import java.awt.*; |
33,6 → 39,7 |
import java.io.IOException; |
import java.text.DecimalFormat; |
import java.text.NumberFormat; |
import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
|
/** |
45,6 → 52,10 |
static Color RED_NOT_OK = new Color(255,200, 164); |
static Color NEUTRAL_TOTAL = new Color(83,83,84); |
|
static Color COLOR_SECTION_BLUE_DARK = new Color(82, 162,254); |
static Color COLOR_SECTION_BLUE = new Color(178,230,254); |
static Color COLOR_SECTION_GREEN = new Color(221,253,177); |
|
public static Color COLOR_1 = new Color(253, 11, 0); |
public static Color COLOR_2 = new Color(255, 190, 0); |
public static Color COLOR_3 = new Color(255, 254, 0); |
595,14 → 606,15 |
|
public static void main(String[] args) throws IOException |
{ |
for(int i = 1; i < 100;i++) |
createTimeSeries(); |
/*for(int i = 1; i < 90;i++) |
{ |
createChartRingOneDimension(i, 100, true, true,true,"ring" + i); |
} |
}*/ |
|
} |
|
public static void createChartRingOneDimension(double value, double max,boolean colorsPercent,boolean degrade,boolean putPercentInCenter, String pathTemplate) throws IOException { |
public static String createChartRingOneDimension(double value, double max,boolean colorsPercent,boolean degrade,boolean putPercentInCenter, String pathTemplate) throws IOException { |
|
DefaultPieDataset data = new DefaultPieDataset(); |
|
626,7 → 638,7 |
//render.setSeriesPaint(0,new Color(255,201,92)); |
plot.setBackgroundPaint(new Color(255, 255, 255)); |
plot.setOutlineVisible(false); |
|
plot.setSectionDepth(0.12); |
if(degrade) |
{ |
double percent = (value/max); |
665,8 → 677,153 |
|
|
BufferedImage image = chart.createBufferedImage( 300, 300); |
String pathGraficoTiposAlunos = Globals.TMP_DIR + File.separator + pathTemplate + "graficoContribuicaoUnidades.png"; |
ImageIO.write(image, "png", new FileOutputStream(pathGraficoTiposAlunos)); |
String pathRing = Globals.TMP_DIR + File.separator + pathTemplate + "Ring.png"; |
ImageIO.write(image, "png", new FileOutputStream(pathRing)); |
return pathRing; |
} |
|
public static void createTimeSeries() throws IOException { |
final XYDataset dataset = createDataset(); |
final JFreeChart chart = createChart(dataset); |
BufferedImage image = chart.createBufferedImage( 600, 200); |
String pathRing = Globals.TMP_DIR + File.separator + "timeSeriesExample.png"; |
ImageIO.write(image, "png", new FileOutputStream(pathRing)); |
} |
|
private static JFreeChart createChart(final XYDataset dataset) { |
|
final JFreeChart chart = ChartFactory.createTimeSeriesChart( |
"", |
"", |
"", |
dataset, |
true, |
false, |
false |
); |
|
chart.setBackgroundPaint(Color.white);//light gray |
|
final XYPlot plot = chart.getXYPlot(); |
plot.setBackgroundPaint(Color.white); |
plot.setDomainGridlinesVisible(true); |
plot.setDomainGridlinePaint(Color.lightGray); |
plot.setRangeGridlinesVisible(true); |
plot.setRangeGridlinePaint(Color.lightGray); |
plot.setDomainCrosshairVisible(true); |
plot.setRangeCrosshairVisible(false); |
|
plot.setRenderer(0, new XYDifferenceRenderer(GREEN_OK,COLOR_1,true)); |
plot.setRenderer(1, new XYLineAndShapeRenderer(true,true)); |
XYDifferenceRenderer renderer = (XYDifferenceRenderer) plot.getRenderer(); |
|
renderer.setBaseItemLabelsVisible(true); |
renderer.setItemLabelsVisible(true); |
|
renderer.setSeriesPaint(0,COLOR_SECTION_BLUE_DARK); |
renderer.setSeriesPaint(1,NEUTRAL_TOTAL); |
renderer.setSeriesStroke(0,new BasicStroke(2.0f)); |
renderer.setSeriesStroke(1,new BasicStroke(2.0f)); |
|
|
DecimalFormat dfKey = new DecimalFormat("#.##"); |
|
StandardXYItemLabelGenerator labelGenerator = new StandardXYItemLabelGenerator("{2}", dfKey, dfKey); |
|
/* |
* {0} - label would be equal to Series expression, |
* {1} - label would be equal to Category expression, |
* {2} - label would be equal to Value expression |
* |
*/ |
|
|
|
renderer.setBaseItemLabelsVisible(true); |
|
renderer.setBaseItemLabelGenerator(labelGenerator); |
|
renderer.setBaseItemLabelFont(new java.awt.Font("SansSerif", java.awt.Font.PLAIN, 10)); |
|
/* |
renderer.setSeriesPositiveItemLabelPosition(0, |
new ItemLabelPosition(ItemLabelAnchor.OUTSIDE3, |
TextAnchor.BOTTOM_LEFT, |
TextAnchor.BOTTOM_LEFT, |
Math.PI));*/ |
renderer.setSeriesShape(0, ShapeUtilities.createDiamond(1F)); |
|
//plot.setRenderer(1,new XYLineAndShapeRenderer()); |
|
/*final XYItemRenderer xyitemrenderer = plot.getRenderer(); |
if (xyitemrenderer instanceof XYLineAndShapeRenderer) { |
final XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) xyitemrenderer; |
renderer.setBaseShapesFilled(true); |
renderer.setBaseShapesVisible(true); |
renderer.setShapesVisible( true ); |
renderer.setDrawOutlines( true ); |
|
//sets the joint level size means the dot size which join two points on a graph 2f,3f |
Stroke stroke = new BasicStroke( |
3f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL); |
renderer.setBaseOutlineStroke(stroke); |
|
}*/ |
|
|
final DateAxis xaxis = (DateAxis) plot.getDomainAxis(); |
//Change domain axis lable by 180/4=45 degree |
//xaxis.setLabelAngle(Math.PI / 4.0); |
|
//Sets the Tick Labels means domain value labels by 90 degree |
xaxis.setVerticalTickLabels(true); |
|
|
//Try to play with it. It will work only in case of horizontal tick mark |
|
xaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); |
|
//set date format |
xaxis.setDateFormatOverride(new SimpleDateFormat("MM-yy")); |
|
final NumberAxis yaxis = (NumberAxis) plot.getRangeAxis(); |
yaxis.setTickLabelsVisible(true); |
yaxis.setVisible(true); |
yaxis.setRange(0,5); |
yaxis.setUpperMargin(0.15); |
//To set range values integer only. Default are float |
//yaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); |
|
return chart; |
|
} |
|
private static XYDataset createDataset() { |
|
final TimeSeriesCollection dataset = new TimeSeriesCollection(); |
dataset.setDomainIsPointsInTime(true); |
|
final TimeSeries s1 = new TimeSeries("Docente", Second.class); |
s1.add(new Second(0, 0, 0, 1, 2, 2012), 4.6); |
//s1.add(new Second(0, 0, 0, 1, 5, 2012), 3.5); |
s1.add(new Second(0, 0, 0, 3, 8, 2012), 3.4); |
|
final TimeSeries s2 = new TimeSeries("Curso", Second.class); |
s2.add(new Second(0, 0, 0, 1, 2, 2012), 4.2); |
s2.add(new Second(0, 0, 0, 2, 5, 2012), 4.1); |
s2.add(new Second(0, 0, 0, 3, 8, 2012), 4.2); |
|
/*final TimeSeries s3 = new TimeSeries("Series 2", Second.class); |
s3.add(new Second(0, 10, 1, 7, 7, 2012), 52); |
s3.add(new Second(0, 20, 12, 7, 7, 2012), 66); |
s3.add(new Second(0, 35, 9, 7, 7, 2012), 79); |
*/ |
dataset.addSeries(s1); |
dataset.addSeries(s2); |
// dataset.addSeries(s3); |
|
return dataset; |
} |
|
|
} |