diff --git a/src/Bonsai.Gui.Visualizers/GraphHelper.cs b/src/Bonsai.Gui.Visualizers/GraphHelper.cs
index 085b65b..bdbc782 100644
--- a/src/Bonsai.Gui.Visualizers/GraphHelper.cs
+++ b/src/Bonsai.Gui.Visualizers/GraphHelper.cs
@@ -150,7 +150,7 @@ internal static Expression SelectDataPoints(Expression expression, string valueS
if (memberNames.Length == 1)
{
var memberName = memberNames[0];
- valueLabels = memberName != ExpressionHelper.ImplicitParameterName ? new[] { memberName } : null;
+ valueLabels = new[] { memberName };
var member = ExpressionHelper.MemberAccess(expression, memberNames[0]);
if (member.Type.IsArray)
{
diff --git a/src/Bonsai.Gui.Visualizers/LineGraphBuilder.cs b/src/Bonsai.Gui.Visualizers/LineGraphBuilder.cs
index 44613a7..cabedf6 100644
--- a/src/Bonsai.Gui.Visualizers/LineGraphBuilder.cs
+++ b/src/Bonsai.Gui.Visualizers/LineGraphBuilder.cs
@@ -1,6 +1,7 @@
using Bonsai.Expressions;
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
@@ -17,6 +18,13 @@ namespace Bonsai.Gui.Visualizers
[Description("A visualizer that plots each element of the sequence as a line graph.")]
public class LineGraphBuilder : SingleArgumentExpressionBuilder
{
+ ///
+ /// Gets or sets the name of the property that will be used as index for the graph.
+ ///
+ [Editor("Bonsai.Design.MemberSelectorEditor, Bonsai.Design", DesignTypes.UITypeEditor)]
+ [Description("The name of the property that will be used as index for the graph.")]
+ public string IndexSelector { get; set; }
+
///
/// Gets or sets the names of the properties to be displayed in the graph.
/// Each selected property must have a point pair compatible type.
@@ -39,6 +47,13 @@ public class LineGraphBuilder : SingleArgumentExpressionBuilder
[Description("The width, in points, to be used for the line graph. Use a value of zero to hide the line.")]
public float LineWidth { get; set; } = 1;
+ ///
+ /// Gets the optional settings for each line added to the graph.
+ ///
+ [Category(nameof(CategoryAttribute.Appearance))]
+ [Description("Specifies optional settings for each line added to the graph.")]
+ public Collection CurveSettings { get; } = new();
+
///
/// Gets or sets the optional capacity used for rolling line graphs. If no capacity is specified, all data points will be displayed.
///
@@ -87,11 +102,14 @@ internal class VisualizerController
internal double? XMax;
internal double? YMin;
internal double? YMax;
+ internal Type IndexType;
+ internal string IndexLabel;
internal bool LabelAxes;
internal string[] ValueLabels;
internal SymbolType SymbolType;
internal float LineWidth;
- internal Action