public List<Graph> getErrorToProgressGraph() {
		Map<Integer, Double> timeProgress = new HashMap<Integer, Double>();
		Map<Integer, Integer> timeCount = new HashMap<Integer, Integer>();
		Map<Integer, Double> stepsProgress = new HashMap<Integer, Double>();
		Map<Integer, Integer> stepsCount = new HashMap<Integer, Integer>();
		
		Graph time = new Graph("Time Error", "Progress (steps)", "Error (s)", lineLabel);
		Graph steps = new Graph("Steps Error", "Progress (steps)", "Error (steps)", lineLabel);
		for (Error e : errors) {
			int progress = e.getUnit() == PredictionUnit.Milliseconds ? e.getProgressPercentage() / 10 * 10 : e.getAbsolutePathLength();
			progress = e.getAbsolutePathLength();
			
			if(e.getUnit() == PredictionUnit.Milliseconds) {
				if(!timeProgress.containsKey(progress)) {
					timeProgress.put(progress, 0.0);
					timeCount.put(progress, 0);
				}
				
				timeProgress.put(progress, timeProgress.get(progress) + e.getError());
				timeCount.put(progress, timeCount.get(progress) + 1);
			}
			else {
				if(!stepsProgress.containsKey(progress)) {
					stepsProgress.put(progress, 0.0);
					stepsCount.put(progress, 0);
				}
				
				stepsProgress.put(progress, stepsProgress.get(progress) + e.getError());
				stepsCount.put(progress, stepsCount.get(progress) + 1);
			}
		}
		
		for(int p : timeProgress.keySet()) {
			time.addDataPoint(p, timeProgress.get(p) / timeCount.get(p));
		}
		for(int p : stepsProgress.keySet()) {
			steps.addDataPoint(p, stepsProgress.get(p) / stepsCount.get(p));
		}
		
		List<Graph> result = new ArrayList<Graph>();
		result.add(time);
		result.add(steps);
		return result;
	}