The classic Fisher iris data is plotted in this chart. This example shows use of the 3D marker type. A sphere has been chosen in this example to highlight data points.
import com.imsl.chart3d.*;
import com.imsl.io.FlatFile;
import java.awt.Color;
import java.io.*;
import java.sql.SQLException;
import java.util.StringTokenizer;
public class DataEx2 extends JFrameChart3D {
private int species[];
private double sepalLength[];
private double sepalWidth[];
private double petalLength[];
private double petalWidth[];
public DataEx2() throws IOException, SQLException {
read();
Chart3D chart = getChart3D();
chart.getBackground().setFillColor("lightyellow");
AxisXYZ axis = new AxisXYZ(chart);
axis.setAxisTitlePosition(axis.AXIS_TITLE_PARALLEL);
axis.getAxisX().getAxisTitle().setTitle("Sepal Length");
axis.getAxisY().getAxisTitle().setTitle("Sepal Width");
axis.getAxisZ().getAxisTitle().setTitle("Petal Length");
axis.setDataType(Data.DATA_TYPE_MARKER);
axis.setMarkerType(Data.MARKER_TYPE_SPHERE);
String color[] = {"red", "green", "blue"};
for (int k = 0; k < species.length; k++) {
// marker type = Species
// x = Sepal Length
// y = Sepal Width
// z = Petal Length
// marker size = Petal Width
double xp[] = {sepalLength[k]};
double yp[] = {sepalWidth[k]};
double zp[] = {petalLength[k]};
Data data = new Data(axis, xp, yp, zp);
data.setMarkerSize(Math.sqrt(petalWidth[k]));
data.setMarkerColor(color[species[k]-1]);
}
setSize(375, 375);
render();
}
void read() throws IOException, SQLException {
InputStream is = getClass().getResourceAsStream("FisherIris.csv");
FisherIrisReader fisherIrisReader = new FisherIrisReader(is);
int nObs = 150;
species = new int[nObs];
sepalLength = new double[nObs];
sepalWidth = new double[nObs];
petalLength = new double[nObs];
petalWidth = new double[nObs];
for (int k = 0; fisherIrisReader.next(); k++) {
species[k] = fisherIrisReader.getInt("Species");
sepalLength[k] = fisherIrisReader.getDouble("Sepal Length");
sepalWidth[k] = fisherIrisReader.getDouble("Sepal Width");
petalLength[k] = fisherIrisReader.getDouble("Petal Length");
petalWidth[k] = fisherIrisReader.getDouble("Petal Width");
}
}
static private class FisherIrisReader extends FlatFile {
public FisherIrisReader(InputStream is) throws IOException {
super(new BufferedReader(new InputStreamReader(is)));
String line = readLine();
StringTokenizer st = new StringTokenizer(line, ",");
for (int j = 0; st.hasMoreTokens(); j++) {
setColumnName(j+1, st.nextToken().trim());
setColumnClass(j, Double.class);
}
}
}
public static void main(String args[]) throws IOException, SQLException {
new DataEx2().setVisible(true);
}
}