Skip to content

Commit bc7d608

Browse files
committed
Add plots for matrices (matshow)
1 parent 8061edc commit bc7d608

File tree

9 files changed

+106
-10
lines changed

9 files changed

+106
-10
lines changed

pom.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.ruivieira</groupId>
88
<artifactId>java-plotlib</artifactId>
9-
<version>0.0.10</version>
9+
<version>0.0.11</version>
1010

1111
<build>
1212
<plugins>
@@ -43,6 +43,10 @@
4343
</plugins>
4444
</build>
4545

46+
<properties>
47+
<commons.math.version>3.6.1</commons.math.version>
48+
</properties>
49+
4650
<dependencies>
4751
<dependency>
4852
<groupId>commons-io</groupId>
@@ -54,6 +58,11 @@
5458
<artifactId>tinylog</artifactId>
5559
<version>1.3.6</version>
5660
</dependency>
61+
<dependency>
62+
<groupId>org.apache.commons</groupId>
63+
<artifactId>commons-math3</artifactId>
64+
<version>${commons.math.version}</version>
65+
</dependency>
5766
</dependencies>
5867

5968
<profiles>

src/main/java/org/ruivieira/plotlib/BinaryAbstractPlot.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
package org.ruivieira.plotlib;
22

3+
import org.ruivieira.plotlib.converters.ListConverter;
4+
35
import java.util.Collection;
46
import java.util.Optional;
57

68
public abstract class BinaryAbstractPlot<T, U> extends UnaryAbstractPlot<T> implements Plot {
79

8-
protected final Converter<U> ys;
10+
protected final ListConverter<U> ys;
911

1012
protected Optional<String> colour = Optional.empty();
1113
protected Optional<Double> alpha = Optional.empty();
1214
protected Optional<Coordinate> ylim = Optional.empty();
1315

1416
public BinaryAbstractPlot(Collection<T> x, Collection<U> y) {
1517
super(x);
16-
this.ys = new Converter<>(y);
18+
this.ys = new ListConverter<>(y);
1719
}
1820

1921
public BinaryAbstractPlot setYLim(Coordinate c) {

src/main/java/org/ruivieira/plotlib/Figure.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class Figure {
2222
public StringBuilder script = new StringBuilder();
2323

2424
public Figure() {
25-
script.append("import matplotlib\nimport matplotlib.pyplot as plt\n\n");
25+
script.append("import matplotlib\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n");
2626
}
2727

2828
public void setTitle(String title) {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.ruivieira.plotlib;
2+
3+
import org.apache.commons.math3.linear.AbstractRealMatrix;
4+
import org.apache.commons.math3.linear.RealMatrix;
5+
import org.ruivieira.plotlib.converters.MatrixConverter;
6+
7+
public abstract class MatrixAbstractPlot implements Plot {
8+
9+
protected final MatrixConverter matrix;
10+
11+
protected final StringBuilder script = new StringBuilder();
12+
13+
public MatrixAbstractPlot(RealMatrix x) {
14+
this.matrix = new MatrixConverter(x);
15+
}
16+
}

src/main/java/org/ruivieira/plotlib/Test.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package org.ruivieira.plotlib;
22

3+
import org.apache.commons.math3.linear.RealMatrix;
34
import org.pmw.tinylog.Configurator;
45
import org.pmw.tinylog.Level;
56
import org.pmw.tinylog.writers.ConsoleWriter;
67
import org.ruivieira.plotlib.plots.Histogram;
78
import org.ruivieira.plotlib.plots.HorizontalLine;
9+
import org.ruivieira.plotlib.plots.MatShow;
810
import org.ruivieira.plotlib.plots.ScatterPlot;
911

1012
import java.io.IOException;
1113
import java.util.Arrays;
1214

15+
import static org.apache.commons.math3.linear.MatrixUtils.createRealIdentityMatrix;
16+
1317

1418
public class Test {
1519

@@ -29,6 +33,11 @@ public static void main(String[] args) throws IOException {
2933
Figure figure = new Figure();
3034
figure.add(new ScatterPlot<>(Arrays.asList(x), Arrays.asList(x)));
3135
figure.add(new HorizontalLine<>(10.0).setColour("black").setLineStyle("--"));
32-
figure.save("/tmp/did.png");
36+
figure.show();
37+
38+
RealMatrix m = createRealIdentityMatrix(10);
39+
Figure f = new Figure();
40+
f.add(new MatShow(m));
41+
f.show();
3342
}
3443
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package org.ruivieira.plotlib;
22

3+
import org.ruivieira.plotlib.converters.ListConverter;
4+
35
import java.util.Collection;
46

57
public abstract class UnaryAbstractPlot<A> implements Plot {
68

7-
protected final Converter<A> xs;
9+
protected final ListConverter<A> xs;
810

911
protected final StringBuilder script = new StringBuilder();
1012

1113
public UnaryAbstractPlot(Collection<A> x) {
12-
this.xs = new Converter<>(x);
14+
this.xs = new ListConverter<>(x);
1315
}
1416
}

src/main/java/org/ruivieira/plotlib/Converter.java renamed to src/main/java/org/ruivieira/plotlib/converters/ListConverter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package org.ruivieira.plotlib;
1+
package org.ruivieira.plotlib.converters;
22

33

44
import java.util.Collection;
55
import java.util.List;
66
import java.util.Objects;
77
import java.util.stream.Collectors;
88

9-
public class Converter<T> {
9+
public class ListConverter<T> {
1010

1111
public List<String> getConverted() {
1212
return converted;
@@ -15,7 +15,7 @@ public List<String> getConverted() {
1515
private final List<String> converted;
1616

1717

18-
public Converter(Collection<T> data) {
18+
public ListConverter(Collection<T> data) {
1919
this.converted = data.stream().map(Objects::toString).collect(Collectors.toList());
2020
}
2121

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.ruivieira.plotlib.converters;
2+
3+
4+
import org.apache.commons.math3.linear.AbstractRealMatrix;
5+
import org.apache.commons.math3.linear.RealMatrix;
6+
7+
import java.util.ArrayList;
8+
import java.util.Collection;
9+
import java.util.List;
10+
import java.util.Objects;
11+
import java.util.stream.Collectors;
12+
13+
public class MatrixConverter<T> {
14+
15+
public List<String> getConverted() {
16+
return converted;
17+
}
18+
19+
private final List<String> converted;
20+
21+
22+
public MatrixConverter(RealMatrix data) {
23+
final double[][] entries = data.getData();
24+
this.converted = new ArrayList<>();
25+
for (int rows = 0 ; rows < data.getRowDimension() ; rows++) {
26+
List<String> rowList = new ArrayList<>();
27+
final double[] rowEntries = data.getRow(rows);
28+
for (int i = 0 ; i < rowEntries.length ; i++) {
29+
rowList.add(String.valueOf(rowEntries[i]));
30+
}
31+
this.converted.add("[" + String.join(",", rowList) + "]");
32+
}
33+
}
34+
35+
public String getConvertedList() {
36+
return "np.array([" + String.join(",", getConverted()) + "])";
37+
}
38+
39+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.ruivieira.plotlib.plots;
2+
3+
import org.apache.commons.math3.linear.AbstractRealMatrix;
4+
import org.apache.commons.math3.linear.RealMatrix;
5+
import org.ruivieira.plotlib.MatrixAbstractPlot;
6+
7+
public class MatShow extends MatrixAbstractPlot {
8+
9+
public MatShow(RealMatrix x) {
10+
super(x);
11+
}
12+
13+
@Override
14+
public String render() {
15+
script.append("plt.matshow(").append(matrix.getConvertedList()).append(")");
16+
17+
return script.toString();
18+
}
19+
}

0 commit comments

Comments
 (0)