OLD 3D Tutorial 03 - Creating a Chart and Add a Data Series

There are four key files here. Two Java classes and two layouts:

1. MainActivity.java

  • Create a reference to CreateScatter3DChartFragment exampleFragment
  • Reads the SciChart license.
  • Inits SciChartBuilder.init(this) and SciChart3DBuilder.init(this);
  • Inflates activity_main.

2. CreateScatter3DChartFragment.java

  • Extends android.app.Fragment.
  • Inflates R.layout.example_single_chart3d_fragment.
  • Creates a Camera3D camera which is used to project world coordinates (x,y,z) onto a 2D plane, i.e., the device screen.
  • Populates XyzDataSeries3D dataSeries with data.
  • Inits a SciChart3DBuilder which it uses to create SciChartSurface3D surface3d.
  • Creates an EllipsePointMarker3D pointMarker3D.
  • Passes the dataseries and pointMarker3D into the RenderableSeries ScatterRenderableSeries3D.

3. activity_main.xml

  • Contains the fragment com.scichart.examples.fragments.charts3d.CreateScatter3DChartFragment in a LinearLayout.

4. example_single_chart3D_fragment.xml

  • Inflates com.scichart.charting3d.visuals.SciChartSurface3D.

Step by step, this is:

Add the license to MainActivity

Copy Code
        String license = "<LicenseContract>\n" +
                "  <Customer>xxxxxxxx</Customer>\n" +
                "  <OrderId>Documentation Use Only</OrderId>\n" +
                "  <LicenseCount>1</LicenseCount>\n" +
                "  <IsTrialLicense>true</IsTrialLicense>\n" +
                "  <SupportExpires>10/01/2019 00:00:00</SupportExpires>\n" +
                "  <ProductCode>SC-ANDV3-PRO</ProductCode>\n" +
                "  <KeyCode>xxxxx</KeyCode>\n" +

        try {
        catch (Exception e) {
            Log.e("scichart", e.printStackTrace();)
  • First we inflate a LinearLayout R.layout.activity_main which contains the Fragment com.scichart.examples.fragments.charts3d.CreateScatter3DChartFragment:
Example Title
Copy Code
public class MainActivity extends Activity {
    private CreateScatter3DChartFragment exampleFragment;
    private CustomDrawerLayout drawerLayout;
    private ImageButton settingsButton;
    protected void onCreate(Bundle bundle) {
  • We use ButterKnife, which is an SDK that lets you use annotation to inflate layouts, to inflate a com.scichart.charting3d.visuals.SciChartSurface3D.
Example Title
Copy Code
public class CreateScatter3DChartFragment extends Fragment {
    protected final SciChart3DBuilder sciChart3DBuilder = SciChart3DBuilder.instance();
    SciChartSurface3D surface3d;
  • This inflates example_single_chart3d_fragment.xml:
Example Title
Copy Code
  • Now the heavy lifting begins in CreateScatter3DChartFragment.init(). We first create some data:
Example Title
Copy Code
protected void initExample() {
        final Camera3D camera = sciChart3DBuilder.newCamera3D().build();

        final NumericAxis3D xAxis = sciChart3DBuilder.newNumericAxis3D().withGrowBy(.1, .1).build();
        final NumericAxis3D yAxis = sciChart3DBuilder.newNumericAxis3D().withGrowBy(.1, .1).build();
        final NumericAxis3D zAxis = sciChart3DBuilder.newNumericAxis3D().withGrowBy(.1, .1).build();
        final XyzDataSeries3D<Double, Double, Double> dataSeries = new XyzDataSeries3D<>(Double.class, Double.class, Double.class);
        for (int i = 0; i < 5; i++) {
            final double x = i;
            final double y = i;
            final double z = i;
            dataSeries.append(x, y, z);
  • Then we make an EllipsePointMarker3D pointMarker3D and ScatterRenderableSeries3D rs and bind that to the XyzDataSeries3D dataseries. A pointMarker means the type, color, and size of the points in the graph.
Example Title
Copy Code
    final EllipsePointMarker3D pointMarker3D = sciChart3DBuilder.newEllipsePointMarker3D()
        final ScatterRenderableSeries3D rs = sciChart3DBuilder.newScatterSeries3D()
  • Now we set the Camera, XYZ axes, and render the chart:
Example Title
Copy Code

The resulting chart looks like this: