SciChart® the market leader in Fast WPF Charts, WPF 3D Charts, iOS Chart, Android Chart and JavaScript Chart Components
Please note! These examples are new to SciChart Mobile v3 release! SciChart iOS & Android ship with Xamarin.iOS and Xamarin.Android bindings around our native iOS & Android Chart controls, allowing you to create fast & feature rich charts to your Xamarin applications. We include ~90 native iOS examples and 90 Android examples, but now also ~60 Xamarin Chart Examples to help you get started with SciChart. You can download the source for our Xamarin Chart Examples from Github, or browse the source code below.
This example demonstrates the functionality of selecting a data point in 3D charts. In this example you can see a Scatter Points selected.
Tap on a scatter point to select one. You may select several points. Tap on an already selected point or do a long press on the free chart space to deselect.
Learn more in our articles and documentation: Plotting realtime Data in Xamarin.iOS 3D Plotting realtime Data in Xamarin.Android 3DWaterfall 3D Chart Type iOS Waterfall 3D Type Android
The C#/Xamarin.iOS/Xamarin.Android source code for the Xamarin Select Scatter Point 3D Chart example is included below (Scroll down!).
Did you know you can also view the source code from one of the following sources as well?
using Xamarin.Examples.Demo.Data;
using SciChart.iOS.Charting;
using Xamarin.Examples.Demo.Utils;
namespace Xamarin.Examples.Demo.iOS
{
[Example3DDefinition("Select Scatter Point 3D Chart", description: "Selection of data-points via VertexSelectionModifier3D", icon: ExampleIcon.LineChart)]
class SelectScatterPoint3DChartViewController : SingleChartWithModifierTipViewController<SCIChartSurface3D>
{
public override string ModifierTip => "To rotate chart use scroll with two fingers";
protected override void InitExample()
{
var dataManager = DataManager.Instance;
var dataSeries3D = new XyzDataSeries3D<double, double, double>();
for (int i = 0; i < 250; i++)
{
var x = dataManager.GetGaussianRandomNumber(5, 1.5);
var y = dataManager.GetGaussianRandomNumber(5, 1.5);
var z = dataManager.GetGaussianRandomNumber(5, 1.5);
dataSeries3D.Append(x, y, z);
}
var rSeries3D = new SCIScatterRenderableSeries3D
{
DataSeries = dataSeries3D,
PointMarker = new SCIEllipsePointMarker3D { FillColor = ColorUtil.LimeGreen, Size = 5f },
MetadataProvider = new SCIDefaultSelectableMetadataProvider3D()
};
using (Surface.SuspendUpdates())
{
Surface.XAxis = new SCINumericAxis3D { GrowBy = new SCIDoubleRange(0.1, 0.1) };
Surface.YAxis = new SCINumericAxis3D { GrowBy = new SCIDoubleRange(0.1, 0.1) };
Surface.ZAxis = new SCINumericAxis3D { GrowBy = new SCIDoubleRange(0.1, 0.1) };
Surface.RenderableSeries.Add(rSeries3D);
Surface.ChartModifiers = new SCIChartModifier3DCollection
{
new SCIPinchZoomModifier3D(),
new SCIOrbitModifier3D(defaultNumberOfTouches: 2) { ReceiveHandledEvents = true },
new SCIZoomExtentsModifier3D(),
new SCIVertexSelectionModifier3D()
};
Surface.Camera = new SCICamera3D();
}
}
}
}
using SciChart.Charting3D.Model;
using SciChart.Charting3D.Model.DataSeries.Xyz;
using SciChart.Charting3D.Modifiers;
using SciChart.Charting3D.Visuals;
using SciChart.Charting3D.Visuals.Axes;
using SciChart.Charting3D.Visuals.Camera;
using SciChart.Charting3D.Visuals.PointMarkers;
using SciChart.Charting3D.Visuals.RenderableSeries.MetadataProviders;
using SciChart.Charting3D.Visuals.RenderableSeries.Scatter;
using SciChart.Data.Model;
using Xamarin.Examples.Demo.Data;
using Xamarin.Examples.Demo;
using System.Drawing;
using Xamarin.Examples.Demo.Droid.Fragments.Base;
namespace Xamarin.Examples.Demo.Droid.Fragments.Examples3D
{
[Example3DDefinition("Select Scatter Point 3D Chart", description: "Selection of data-points via VertexSelectionModifier3D", icon: ExampleIcon.LineChart)]
class SelectScatterPoint3DChartFragment : ExampleBaseFragment
{
public SciChartSurface3D Surface => View.FindViewById<SciChartSurface3D>(Resource.Id.chart3d);
public override int ExampleLayoutId => Resource.Layout.Example_Single_3D_Chart_With_Modifier_Tip_Fragment;
protected override void InitExample()
{
var dataManager = DataManager.Instance;
var dataSeries3D = new XyzDataSeries3D<double, double, double>();
for (int i = 0; i < 250; i++)
{
var x = dataManager.GetGaussianRandomNumber(5, 1.5);
var y = dataManager.GetGaussianRandomNumber(5, 1.5);
var z = dataManager.GetGaussianRandomNumber(5, 1.5);
dataSeries3D.Append(x, y, z);
}
var pointMarker3D = new EllipsePointMarker3D()
{
FillColor = Color.LimeGreen,
Size = 5f
};
var renderableSeries3D = new ScatterRenderableSeries3D()
{
PointMarker = pointMarker3D,
DataSeries = dataSeries3D,
// set ISelectableMetadataProvider3D because we're going to use vertex selection for this series
MetadataProvider = new DefaultSelectableMetadataProvider3D()
};
using (Surface.SuspendUpdates())
{
Surface.XAxis = new NumericAxis3D() { GrowBy = new DoubleRange(0.1, 0.1) };
Surface.YAxis = new NumericAxis3D() { GrowBy = new DoubleRange(0.1, 0.1) };
Surface.ZAxis = new NumericAxis3D() { GrowBy = new DoubleRange(0.1, 0.1) };
Surface.Camera = new Camera3D();
Surface.RenderableSeries.Add(renderableSeries3D);
Surface.ChartModifiers = new ChartModifier3DCollection
{
new PinchZoomModifier3D(),
new OrbitModifier3D() { ReceiveHandledEvents = true, ExecuteOnPointerCount = 2 },
new ZoomExtentsModifier3D(),
new VertexSelectionModifier3D()
{
ReceiveHandledEvents = true,
}
};
}
}
}
}