public Canvas canvas() {
        Canvas canvas = new Canvas(getLowerBound(), getUpperBound());
        canvas.add(this);
        if (name != null) {
            canvas.setTitle(name);
        }
        return canvas;
    }
@Test
    public void testBox() throws Exception {
        System.out.println("Box");

        String[] labels = ((smile.data.measure.NominalScale) iris.schema().field("class").measure).levels();
        double[][] data = new double[labels.length][];
        for (int i = 0; i < data.length; i++) {
            var label = labels[i];
            data[i] = iris.stream().
                    filter(row -> row.getString("class").equals(label)).
                    mapToDouble(row -> row.getFloat("sepallength")).
                    toArray();
        }
        var canvas = new BoxPlot(data, labels).canvas();
        canvas.setAxisLabels("", "sepallength");
        canvas.window();
    }