21 package org.matsim.counts.algorithms.graphs;
23 import java.awt.Color;
25 import java.awt.geom.Ellipse2D;
26 import java.awt.geom.Rectangle2D;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.Iterator;
30 import java.util.List;
31 import java.util.Vector;
33 import org.jfree.chart.ChartFactory;
34 import org.jfree.chart.JFreeChart;
35 import org.jfree.chart.annotations.XYTextAnnotation;
36 import org.jfree.chart.axis.LogarithmicAxis;
37 import org.jfree.chart.labels.CustomXYToolTipGenerator;
38 import org.jfree.chart.plot.PlotOrientation;
39 import org.jfree.chart.plot.XYPlot;
40 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
41 import org.jfree.chart.urls.CustomXYURLGenerator;
42 import org.jfree.data.xy.DefaultXYDataset;
43 import org.jfree.data.xy.XYSeries;
44 import org.jfree.data.xy.XYSeriesCollection;
57 super(ccl, iteration, filename, filename);
67 XYSeriesCollection dataset0=
new XYSeriesCollection();
68 XYSeries series=
new XYSeries(
"MATSim volumes");
70 XYSeriesCollection dataset_outliers=
new XYSeriesCollection();
71 XYSeries series_outliers=
new XYSeries(
"MATSim outliers");
73 CustomXYURLGenerator url_gen=
new CustomXYURLGenerator();
74 CustomXYToolTipGenerator tt_gen=
new CustomXYToolTipGenerator();
76 final ArrayList<String> urls =
new ArrayList<String>();
77 final ArrayList<String> tooltips =
new ArrayList<String>();
78 List<Comp> comps=
new Vector<Comp>();
80 Iterator<CountSimComparison> l_it = this.
ccl_.iterator();
82 while (l_it.hasNext()) {
97 series.add(realVal,simVal);
98 comps.add(
new Comp(realVal,
"link"+cc.
getId()+
".html",
"Link "+cc.
getId()+
"; " +
99 "Count: "+ realVal +
", Sim: "+ simVal));
104 series_outliers.add(realVal, simVal);
110 dataset0.addSeries(series);
111 dataset_outliers.addSeries(series_outliers);
122 for (Iterator<Comp> iter = comps.iterator(); iter.hasNext();) {
123 Comp cp = iter.next();
128 url_gen.addURLSeries(urls);
129 tt_gen.addToolTipSeries(tooltips);
131 String title=
"Volumes " + (hour - 1) +
":00 - "+ (hour) +
":00, Iteration: "+this.
iteration_;
133 this.
chart_ = ChartFactory.createXYLineChart(
135 "Count Volumes [veh/h]",
136 "Sim Volumes [veh/h]",
138 PlotOrientation.VERTICAL,
143 XYPlot plot=this.
chart_.getXYPlot();
144 final LogarithmicAxis axis_x =
new LogarithmicAxis(
"Count Volumes [veh/h]");
145 final LogarithmicAxis axis_y =
new LogarithmicAxis(
"Sim Volumes [veh/h]");
146 axis_x.setAllowNegativesFlag(
false);
147 axis_y.setAllowNegativesFlag(
false);
150 XYLineAndShapeRenderer renderer =
new XYLineAndShapeRenderer();
151 renderer.setDefaultLinesVisible(
false);
152 renderer.setURLGenerator(url_gen);
153 renderer.setSeriesPaint(0, Color.black);
154 renderer.setSeriesToolTipGenerator(0, tt_gen);
155 renderer.setSeriesShape(0,
new Rectangle2D.Double(-1.5, -1.5, 3.0, 3.0));
160 XYLineAndShapeRenderer renderer2 =
new XYLineAndShapeRenderer();
161 renderer2.setDefaultLinesVisible(
false);
162 renderer2.setSeriesPaint(0, Color.red);
163 renderer2.setSeriesShape(0,
new Ellipse2D.Double(-3.0, -3.0, 6.0, 6.0));
168 DefaultXYDataset dataset1=
new DefaultXYDataset();
169 dataset1.addSeries(
"f1x",
new double[][] {{1.0, 10000.0},{1.0, 10000.0}});
170 dataset1.addSeries(
"f2x",
new double[][] {{1.0, 10000.0},{2.0, 20000.0}});
171 dataset1.addSeries(
"f05x",
new double[][] {{2.0, 10000.0},{1.0, 5000.0}});
173 XYLineAndShapeRenderer renderer3 =
new XYLineAndShapeRenderer();
174 renderer3.setDefaultShapesVisible(
false);
175 renderer3.setSeriesPaint(0, Color.blue);
176 renderer3.setSeriesPaint(1, Color.blue);
177 renderer3.setSeriesPaint(2, Color.blue);
178 renderer3.setDefaultSeriesVisibleInLegend(
false);
179 renderer3.setSeriesItemLabelsVisible(0,
true);
180 renderer3.setSeriesItemLabelsVisible(1,
false);
181 renderer3.setSeriesItemLabelsVisible(2,
false);
183 XYTextAnnotation annotation0=
new XYTextAnnotation(
"2.0 count",12000.0, 15500.0);
184 annotation0.setFont(
new Font(
"SansSerif", Font.BOLD, 11));
185 plot.addAnnotation(annotation0);
186 XYTextAnnotation annotation1=
new XYTextAnnotation(
"count",13000.0, 10000.0);
187 annotation1.setFont(
new Font(
"SansSerif", Font.BOLD, 11));
188 plot.addAnnotation(annotation1);
189 XYTextAnnotation annotation2=
new XYTextAnnotation(
"0.5 count",11000.0, 3500.0);
190 annotation2.setFont(
new Font(
"SansSerif", Font.BOLD, 11));
191 plot.addAnnotation(annotation2);
193 plot.setDomainAxis(axis_x);
194 plot.setRangeAxis(axis_y);
195 plot.setRenderer(0, renderer);
197 plot.setRenderer(1, renderer2);
198 plot.setDataset(1, dataset_outliers);
200 plot.setRenderer(2, renderer3);
201 plot.setDataset(2, dataset1);
203 plot.getRangeAxis().setRange(1.0, 19000.0);
204 plot.getDomainAxis().setRange(1.0, 19000.0);
CountsSimRealPerHourGraph(final List< CountSimComparison > ccl, final int iteration, final String filename)
List< CountSimComparison > ccl_
void setChartTitle(final String chartTitle)
double getSimulationValue()
JFreeChart createChart(final int hour)