⚠️ Warning: This website is still being developed. Code examples, videos, and links may be broken while I continue to work on it. -- Scott, May 10, 2020
Resources for visualizing data using C# and the .NET platform

SciChart

SciChart is a commercial charting library for .NET. Although they have mobile (iOS and Android) libraries, here we will take a closer look at their WPF charts library. It may be possible to use this control in Windows Forms applications with ElementHost or more modern techniques, but it's clearly intended for use in WPF applications.

SciChart strikes a nice balance of performance and aesthetic. They use DirectX (Windows), OpenGL (Android), or Metal (iOS) hardware acceleration, while providing extensively themeable controls with many customizable behaviors. Their demo application features many plot types, and the intuitive controls, well-balanced visuals, and subtle animations are the best I've seen in this class of software.

Default Controls

  • double click: fit axes to data
  • left-click-drag: zoom to region (if zoom mode)
  • left-click-drag: zoom to region (if pan mode)
  • scroll-wheel: zoom to cursor

Price

Old screenshots suggest:

  • $599 for binaries and 3 months of support
  • $899 for binaries and 12 months of support
  • $2,200 for full source code and mobile controls

But the SciChart store now lists prices as a yearly fee, with different prices per year number, so I'm confused to the point where I don't know what the cost actually is or if the current software is a "software as a service" model or not.

Demo Application

The SciChart demo application has tons of example charts, all with source code. Let's take a closer look at the line chart shown in the screenshot at the top of the page.

Sample Code (Line Chart)

Here's the code associated with the line chart shown in the screenshot at the top of the page.

Most of the styling seems to be achieved by customizing the XAML.

<!--  The SciChartInteractionToolbar adds zoom, pan, zoom extents and rotate functionality  -->
<!--  to the chart and is included for example purposes.  -->
<!--  If you wish to know how to zoom and pan a chart then do a search for Zoom Pan in the Examples suite!  -->
<ext:SciChartInteractionToolbar TargetSurface="{Binding Source={x:Reference Name=sciChart}}"/>

<!--  Create the chart surface  -->
<s:SciChartSurface x:Name="sciChart" Grid.Column="1">

    <!--  Declare RenderableSeries  -->
    <s:SciChartSurface.RenderableSeries>
        <s:FastLineRenderableSeries x:Name="lineRenderSeries" Stroke="#FF99EE99" StrokeThickness="2">
            <s:FastLineRenderableSeries.SeriesAnimation>
                <s:SweepAnimation AnimationDelay="0:0:1" Duration="0:0:5"/>
            </s:FastLineRenderableSeries.SeriesAnimation>
        </s:FastLineRenderableSeries>
    </s:SciChartSurface.RenderableSeries>

    <!--  Create an X Axis with GrowBy  -->
    <s:SciChartSurface.XAxis>
        <s:NumericAxis DrawMajorBands="True" FlipCoordinates="True" GrowBy="0.1, 0.1"/>
    </s:SciChartSurface.XAxis>

    <!--  Create a Y Axis with GrowBy. Optional bands give a cool look and feel for minimal performance impact  -->
    <s:SciChartSurface.YAxis>
        <s:NumericAxis DrawMajorBands="True" GrowBy="0.5, 0.5"/>
    </s:SciChartSurface.YAxis>

</s:SciChartSurface>

The C# uses MVC-style programming to crate a series (model) and load it into a renderer (view). Modifying the series data will trigger updates to the view.

private void LineChartExampleView_OnLoaded(object sender, RoutedEventArgs e)
{            
    // Create a DataSeries of type X=double, Y=double
    var dataSeries = new XyDataSeries<double, double>();

    lineRenderSeries.DataSeries = dataSeries;

    var data = DataManager.Instance.GetFourierSeries(1.0, 0.1);

    // Append data to series. SciChart automatically redraws
    dataSeries.Append(data.XData, data.YData);

    sciChart.ZoomExtents();
}

Performance Demo

The SciChart demo has a performance example which simulates live incoming data (1,000 points every 20 ms). Comfortable interactive frame rates are achieved even when the data set has millions of points.

Interestingly they disallow mouse interaction while data is being updated and I'm not sure why. This is a strikingly impressive demo nonetheless!

The excellent performance of SciCharts is what makes it a strong contender in the charting space. Their demo application did an excellent thing by pairing interactive examples with their source code.

SciChart Resources