Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java @ 8748:36d7bda0b47a
(issue1788) Fix area split if there are no NaN's in the data
The split algorithmn splits in a way that it always creates
at least two datasets. One before the NaN, one after the NaN.
This is broken in case the dataset does not contain any NaN
value as it resulted in two identical datasets. This changed
the display and resulted in a broken area calculation.
I've also added some commented out debug code that was helpful
tracking down this problem.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 08 Jun 2015 16:53:54 +0200 |
parents | 4dd6d89ce95e |
children | c4654863108d |
comparison
equal
deleted
inserted
replaced
8747:e9d912c97fa8 | 8748:36d7bda0b47a |
---|---|
619 return true; | 619 return true; |
620 } | 620 } |
621 return false; | 621 return false; |
622 } | 622 } |
623 | 623 |
624 protected static boolean hasNaN(XYDataset dataset) { | |
625 int N = dataset.getItemCount(0); | |
626 int M = dataset.getItemCount(1); | |
627 | |
628 int i = 0, j = 0; | |
629 boolean haveNaN = false; | |
630 for (; i < N; ++i) { | |
631 double x = dataset.getXValue(0, i); | |
632 double y = dataset.getYValue(0, i); | |
633 if (Double.isNaN(x) || Double.isNaN(y)) { | |
634 return true; | |
635 } | |
636 } | |
637 | |
638 for (; j < M; ++j) { | |
639 double x = dataset.getXValue(1, j); | |
640 double y = dataset.getYValue(1, j); | |
641 if (Double.isNaN(x) || Double.isNaN(y)) { | |
642 return true; | |
643 } | |
644 } | |
645 return false; | |
646 } | |
647 | |
648 | |
624 protected static List<XYDataset> splitByNaNsTwoSeries( | 649 protected static List<XYDataset> splitByNaNsTwoSeries( |
625 XYDataset dataset | 650 XYDataset dataset |
626 ) { | 651 ) { |
627 boolean debug = log.isDebugEnabled(); | 652 boolean debug = log.isDebugEnabled(); |
628 | 653 |
629 List<XYDataset> datasets = new ArrayList<XYDataset>(); | 654 List<XYDataset> datasets = new ArrayList<XYDataset>(); |
655 | |
656 if (!hasNaN(dataset)) { | |
657 datasets.add(dataset); | |
658 return datasets; | |
659 } | |
630 | 660 |
631 int N = dataset.getItemCount(0); | 661 int N = dataset.getItemCount(0); |
632 int M = dataset.getItemCount(1); | 662 int M = dataset.getItemCount(1); |
633 | 663 |
634 int i = 0, j = 0; | 664 int i = 0, j = 0; |
844 | 874 |
845 if (debug) { | 875 if (debug) { |
846 log.debug("datasets after split: " + datasets.size()); | 876 log.debug("datasets after split: " + datasets.size()); |
847 } | 877 } |
848 | 878 |
879 /* | |
880 log.debug("Begin dump datasets: "); | |
881 log.debug("Original"); | |
882 i=0; | |
883 dumpDataset(dataset, "Original" ); | |
884 for (XYDataset set: datasets) { | |
885 dumpDataset(dataset, "New: " + i++); | |
886 } | |
887 log.debug("End dump datasets: "); | |
888 */ | |
889 | |
849 return datasets; | 890 return datasets; |
850 } | 891 } |
892 | |
893 /* | |
894 public static void dumpDataset(XYDataset dataset, String msg) { | |
895 log.debug("Begin dump Dataset: " + msg); | |
896 | |
897 int N = dataset.getItemCount(0); | |
898 int M = dataset.getItemCount(1); | |
899 | |
900 int i = 0, j = 0; | |
901 for (; i < N; ++i) { | |
902 double x = dataset.getXValue(0, i); | |
903 double y = dataset.getYValue(0, i); | |
904 log.debug("0 " + i + " X: "+ x + "Y: "+ y); | |
905 } | |
906 | |
907 for (; j < M; ++j) { | |
908 double x = dataset.getXValue(1, j); | |
909 double y = dataset.getYValue(1, j); | |
910 log.debug("1 " + i + " X: "+ x + "Y: "+ y); | |
911 } | |
912 log.debug("End dump Dataset: " + msg); | |
913 } | |
914 */ | |
915 | |
851 | 916 |
852 public static List<XYDataset> splitByNaNs(XYDataset dataset) { | 917 public static List<XYDataset> splitByNaNs(XYDataset dataset) { |
853 | 918 |
854 switch (dataset.getSeriesCount()) { | 919 switch (dataset.getSeriesCount()) { |
855 case 0: | 920 case 0: |