Documentation/4.1/Developers/Charts
From Slicer Wiki
Home < Documentation < 4.1 < Developers < Charts
Contents
Slicer Charting Overview
Slicer provides Charting facilities that include a special Chart View that can be packed in the layout, similar to the Slice Views and 3D Views. The architecture also includes nodes that represent the data to be displayed in the chart as well as nodes to represent the display properties of the data and the chart itself.
Chart capabilities
Chart View
- qMRMLChartWidget
- The toplevel charting widget that is packed in layout. Subclass of qMRMLWidget. Contains a qMRMLChartView and a qMRMLChartViewControllerWidget. There can be several Chart Widgets in a single layout.
- qMRMLChartView
- Display canvas of the chart. This is currently a subclass of QWebView as the charting facilities is based on a jQuery library called jqPlot.
- qMRMLChartViewControllerWidget
- Widget to control the content and display of a chart.
MRML Nodes
- vtkMRMLChartViewNode
- Node associated with a Chart View. Keeps track of which chart to display in a Chart View. There can be multiple charts in a scene and a given Chart View can display any of the charts.
- vtkMRMLChartNode
- Represents the content and properties of a chart. Manages a list of Array Nodes to display in the chart. Provides methods to set the properties of a chart or the properties of each Array Node.
- vtkMRMLDoubleArrayNode
- Represents the data that can be displayed in a chart. Array nodes contain a series of 3-tuples representing the (X, Y, Error) measurement values.
Constructing a chart
Below is an example in python to construct and display a chart communicating completely at the level of MRML.
import slicer import math lns = slicer.mrmlScene.GetNodesByClass('vtkMRMLLayoutNode') lns.InitTraversal() ln = lns.GetNextItemAsObject() ln.SetViewArrangement(24) cvns = slicer.mrmlScene.GetNodesByClass('vtkMRMLChartViewNode') cvns.InitTraversal() cvn = cvns.GetNextItemAsObject() dn = slicer.mrmlScene.AddNode(slicer.vtkMRMLDoubleArrayNode()) a = dn.GetArray() a.SetNumberOfTuples(600) x = range(0, 600) for i in range(len(x)): a.SetComponent(i, 0, x[i]/50.0) a.SetComponent(i, 1, math.sin(x[i]/50.0)) a.SetComponent(i, 2, 0) dn2 = slicer.mrmlScene.AddNode(slicer.vtkMRMLDoubleArrayNode()) a = dn2.GetArray() a.SetNumberOfTuples(600) x = range(0, 600) for i in range(len(x)): a.SetComponent(i, 0, x[i]/50.0) a.SetComponent(i, 1, math.cos(x[i]/50.0)) a.SetComponent(i, 2, 0) cn = slicer.mrmlScene.AddNode(slicer.vtkMRMLChartNode()) cn.AddArray('A double array', dn.GetID()) cn.AddArray('Another double array', dn2.GetID()) cn.SetProperty('default', 'title', 'A simple chart with 2 curves') cn.SetProperty('default', 'xAxisLabel', 'Something in x') cn.SetProperty('default', 'yAxisLabel', 'Something in y') cvn.SetChartNodeID(cn.GetID())
This code produces the chart below.