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); } }