From: Patrick Plitzner Date: Fri, 13 Jul 2018 06:32:01 +0000 (+0200) Subject: ref #7549 Add/use apache common math for frequency distribution X-Git-Tag: 5.2.0^2~91 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/a3a12095b7d9bec94f1e1d924eb007308a78e059 ref #7549 Add/use apache common math for frequency distribution --- diff --git a/eu.etaxonomy.taxeditor.cdmlib/.classpath b/eu.etaxonomy.taxeditor.cdmlib/.classpath index c03a7c6e0..2b1ea6a1e 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/.classpath +++ b/eu.etaxonomy.taxeditor.cdmlib/.classpath @@ -1,5 +1,6 @@ + diff --git a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF index 50d2891fd..ba8b680bc 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF @@ -231,6 +231,7 @@ Export-Package: com.google.api, org.apache.commons.lang.exception, org.apache.commons.lang.text, org.apache.commons.logging, + org.apache.commons.math3.stat, org.apache.fop.apps, org.apache.http, org.apache.http.client, @@ -869,5 +870,6 @@ Bundle-ClassPath: ., lib/lucene-sandbox-5.4.1.jar, lib/lucene-suggest-5.4.1.jar, lib/redmine-java-api-3.1.0.jar, - lib/org.swtchart_0.10.0.v20160212.jar + lib/org.swtchart_0.10.0.v20160212.jar, + lib/commons-math3-3.6.1.jar Import-Package: eu.etaxonomy.cdm.api.application diff --git a/eu.etaxonomy.taxeditor.cdmlib/build.properties b/eu.etaxonomy.taxeditor.cdmlib/build.properties index 0ece366f4..2c4848053 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/build.properties +++ b/eu.etaxonomy.taxeditor.cdmlib/build.properties @@ -223,7 +223,8 @@ bin.includes = META-INF/,\ lib/lucene-suggest-5.4.1.jar,\ lib/cdmlib-cache-5.2.0-SNAPSHOT.jar,\ lib/redmine-java-api-3.1.0.jar,\ - lib/org.swtchart_0.10.0.v20160212.jar + lib/org.swtchart_0.10.0.v20160212.jar,\ + lib/commons-math3-3.6.1.jar jars.compile.order = . output.. = bin/ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/commons-math3-3.6.1.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/commons-math3-3.6.1.jar new file mode 100644 index 000000000..0ff582cfc Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/commons-math3-3.6.1.jar differ diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CategoricalDataHistogram.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CategoricalDataHistogram.java index 5a25d8c5d..d84cc8ae2 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CategoricalDataHistogram.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CategoricalDataHistogram.java @@ -8,8 +8,10 @@ */ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix; -import java.util.HashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.math3.stat.Frequency; import eu.etaxonomy.cdm.model.description.Feature; import eu.etaxonomy.cdm.model.description.State; @@ -22,23 +24,28 @@ import eu.etaxonomy.cdm.model.description.State; public class CategoricalDataHistogram { private Feature feature; - private Map stateCountMap; + private Frequency frequency; + private List states; public CategoricalDataHistogram(Feature feature) { this.feature = feature; - this.stateCountMap = new HashMap<>(); + this.states = new ArrayList<>(); + this.frequency = new Frequency(); feature.getSupportedCategoricalEnumerations() .forEach(voc->voc.getTerms() - .forEach(state->stateCountMap.put(state, 0))); + .forEach(state->states.add(state))); } public void addState(State state){ - Integer integer = stateCountMap.get(state); - stateCountMap.put(state, integer+1); + frequency.addValue(state.getLabel()); + } + + public long getCount(State state){ + return frequency.getCount(state.getLabel()); } - public Map getStateCountMap() { - return stateCountMap; + public List getStates() { + return states; } public Feature getFeature() { diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/ChartTooltip.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/ChartTooltip.java index 607024892..f586ffc54 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/ChartTooltip.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/ChartTooltip.java @@ -8,9 +8,7 @@ */ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; +import java.util.List; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; @@ -57,22 +55,25 @@ public class ChartTooltip extends ToolTip { Chart chart = new Chart(parent, SWT.NONE); chart.setLayoutData(new GridData(600, 300)); + //get histogram for column int colPos = matrix.getNatTable().getColumnPositionByX(event.x); int colIndex = matrix.getNatTable().getColumnIndexByPosition(colPos); Feature feature = matrix.getIndexToFeatureMap().get(colIndex); CategoricalDataHistogram histogram = matrix.getFeatureToHistogramMap().get(feature); - // set titles + // set chart title chart.getTitle().setText(feature.getLabel()); IAxis xAxis = chart.getAxisSet().getXAxis(0); - Map stateCountMap = histogram.getStateCountMap(); - String[] states = new String[stateCountMap.size()]; - double[] counts = new double[stateCountMap.size()]; + + //initalize x and y axis values + List statesList = histogram.getStates(); + String[] states = new String[statesList.size()]; + double[] counts = new double[statesList.size()]; + int index = 0; - for(Iterator> iterator = histogram.getStateCountMap().entrySet().iterator();iterator.hasNext();){ - Entry entry = iterator.next(); - states[index] = entry.getKey().getLabel(); - counts[index] = entry.getValue(); + for (State state : statesList) { + states[index] = state.getLabel(); + counts[index] = histogram.getCount(state); index++; } xAxis.setCategorySeries(states); @@ -82,12 +83,9 @@ public class ChartTooltip extends ToolTip { IAxis yAxis = chart.getAxisSet().getYAxis(0); yAxis.getTitle().setVisible(false); -// yAxis.getTick().setVisible(false); -// chart.setOrientation(SWT.VERTICAL); chart.getLegend().setVisible(false); - // create bar series IBarSeries barSeries = (IBarSeries) chart.getSeriesSet() .createSeries(SeriesType.BAR, "state counts"); ISeriesLabel seriesLabel = barSeries.getLabel(); @@ -95,7 +93,6 @@ public class ChartTooltip extends ToolTip { seriesLabel.setVisible(true); barSeries.setYSeries(counts); - // adjust the axis range chart.getAxisSet().adjustRange(); return chart; @@ -116,7 +113,7 @@ public class ChartTooltip extends ToolTip { && rowPos==1 && colIndex>=CharacterMatrix.LEADING_COLUMN_COUNT && histogram!=null - && !histogram.getStateCountMap().isEmpty()) { + && !histogram.getStates().isEmpty()) { return true; } return false;