Skip to content

Commit 41c8381

Browse files
committed
Add code that demonstrates the PlotService API
1 parent 5823b1b commit 41c8381

9 files changed

Lines changed: 623 additions & 0 deletions
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2009 - 2016 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package net.imagej.plot;
33+
34+
/**
35+
* @author Matthias Arzt
36+
*/
37+
public class AllDemos {
38+
39+
public static void main(final String... args) {
40+
new BoxPlotDemo().run();
41+
new CategoryChartDemo().run();
42+
new LineStyleDemo().run();
43+
new LogarithmicAxisDemo().run();
44+
new MarkerStyleDemo().run();
45+
new SortingCategoriesDemo().run();
46+
new XYPlotDemo().run();
47+
}
48+
49+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2009 - 2016 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package net.imagej.plot;
33+
34+
import org.scijava.util.Colors;
35+
36+
import java.util.*;
37+
38+
/**
39+
* @author Matthias Arzt
40+
*/
41+
class BoxPlotDemo extends ChartDemo{
42+
43+
public void run() {
44+
CategoryChart<String> chart = plotService.newCategoryChart(String.class);
45+
46+
Map<String, Collection<Double>> randomData1 = new TreeMap<>();
47+
randomData1.put("A", collectionOfRandomNumbers(10));
48+
randomData1.put("B", collectionOfRandomNumbers(20));
49+
randomData1.put("C", collectionOfRandomNumbers(30));
50+
51+
BoxSeries<String> boxSeries1 = chart.addBoxSeries();
52+
boxSeries1.setLabel("boxes1");
53+
boxSeries1.setValues(randomData1);
54+
boxSeries1.setColor(Colors.CYAN);
55+
56+
Map<String, Collection<Double>> randomData2 = new TreeMap<>();
57+
randomData2.put("A", collectionOfRandomNumbers(10));
58+
randomData2.put("B", collectionOfRandomNumbers(20));
59+
randomData2.put("C", collectionOfRandomNumbers(30));
60+
61+
BoxSeries<String> boxSeries2 = chart.addBoxSeries();
62+
boxSeries2.setLabel("boxes2");
63+
boxSeries2.setValues(randomData2);
64+
boxSeries2.setColor(Colors.BLACK);
65+
66+
ui.show(chart);
67+
}
68+
69+
private static Collection<Double> collectionOfRandomNumbers(int size) {
70+
Random rand = new Random();
71+
Vector<Double> result = new Vector<>(size);
72+
for(int i = 0; i < size; i++)
73+
result.add(rand.nextGaussian()*20);
74+
return result;
75+
}
76+
77+
public static void main(final String... args) {
78+
new BoxPlotDemo().run();
79+
}
80+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2009 - 2016 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package net.imagej.plot;
33+
34+
import java.util.Arrays;
35+
import java.util.Map;
36+
import java.util.TreeMap;
37+
38+
/**
39+
* @author Matthias Arzt
40+
*/
41+
class CategoryChartDemo extends ChartDemo{
42+
43+
public void run() {
44+
45+
CategoryChart<String> chart = plotService.newCategoryChart(String.class);
46+
chart.categoryAxis().setManualCategories(Arrays.asList("one wheel", "bicycle", "car"));
47+
48+
Map<String, Double> wheelsData = new TreeMap<>();
49+
wheelsData.put("one wheel", 1.0);
50+
wheelsData.put("bicycle", 2.0);
51+
wheelsData.put("car", 4.0);
52+
53+
LineSeries<String> lineSeries = chart.addLineSeries();
54+
lineSeries.setLabel("wheels");
55+
lineSeries.setValues(wheelsData);
56+
57+
Map<String, Double> speedData = new TreeMap<>();
58+
speedData.put("one wheel", 10.0);
59+
speedData.put("bicycle", 30.0);
60+
speedData.put("car", 200.0);
61+
62+
BarSeries<String> barSeries = chart.addBarSeries();
63+
barSeries.setLabel("speed");
64+
barSeries.setValues(speedData);
65+
66+
ui.show(chart);
67+
}
68+
69+
public static void main(final String... args) {
70+
new CategoryChartDemo().run();
71+
}
72+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2009 - 2016 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package net.imagej.plot;
33+
34+
import org.scijava.Context;
35+
import org.scijava.ui.UIService;
36+
37+
/**
38+
* @author Matthias Arzt
39+
*/
40+
class ChartDemo {
41+
42+
final UIService ui;
43+
44+
final PlotService plotService;
45+
46+
ChartDemo() {
47+
final Context ctx = new Context();
48+
ui = ctx.service(UIService.class);
49+
plotService = ctx.service(PlotService.class);
50+
}
51+
52+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2009 - 2016 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package net.imagej.plot;
33+
34+
import org.scijava.util.Colors;
35+
36+
import java.util.Arrays;
37+
38+
/**
39+
* @author Matthias Arzt
40+
*/
41+
class LineStyleDemo extends ChartDemo {
42+
43+
44+
public void run() {
45+
LineStyle[] lineStyles = LineStyle.values();
46+
47+
XYPlot plot = plotService.newXYPlot();
48+
plot.setTitle("Line Styles");
49+
plot.xAxis().setManualRange(-1.0, 2.0);
50+
plot.yAxis().setManualRange(-1.0, (double) lineStyles.length);
51+
52+
for(int i = 0; i < lineStyles.length; i++)
53+
addSeries(plot, i, lineStyles[i]);
54+
55+
ui.show(plot);
56+
}
57+
58+
private void addSeries(XYPlot plot, double y, LineStyle lineStyle) {
59+
XYSeries series = plot.addXYSeries();
60+
series.setLabel(lineStyle.toString());
61+
series.setValues(Arrays.asList(0.0,1.0), Arrays.asList(y,y));
62+
series.setStyle(plot.newSeriesStyle(Colors.BLACK, lineStyle, MarkerStyle.CIRCLE));
63+
}
64+
65+
public static void main(final String... args) {
66+
new LineStyleDemo().run();
67+
}
68+
69+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2009 - 2016 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package net.imagej.plot;
33+
34+
import java.util.ArrayList;
35+
import java.util.List;
36+
37+
/**
38+
* @author Matthias Arzt
39+
*/
40+
class LogarithmicAxisDemo extends ChartDemo {
41+
42+
public void run() {
43+
44+
XYPlot plot = plotService.newXYPlot();
45+
plot.setTitle("Logarithmic");
46+
plot.xAxis().setAutoRange();
47+
plot.yAxis().setAutoRange();
48+
plot.yAxis().setLogarithmic(true);
49+
50+
List<Double> xs = new ArrayList<>();
51+
List<Double> ys = new ArrayList<>();
52+
for(double x = 0; x < 10; x += 0.1) {
53+
xs.add(x);
54+
ys.add(Math.exp(Math.sin(x)));
55+
}
56+
57+
XYSeries series = plot.addXYSeries();
58+
series.setLabel("exp(sin(x))");
59+
series.setValues(xs, ys);
60+
61+
ui.show(plot);
62+
}
63+
64+
public static void main(final String... args) {
65+
new LogarithmicAxisDemo().run();
66+
}
67+
}

0 commit comments

Comments
 (0)