// --------------------------------------------------------------------------------------------------------------------
//
// Copyright (c) 2014 OxyPlot contributors
//
//
// Provides examples for the .
//
// --------------------------------------------------------------------------------------------------------------------
namespace ExampleLibrary
{
using System;
using OxyPlot;
using OxyPlot.Series;
using OxyPlot.Legends;
///
/// Provides examples for the .
///
[Examples("StairStepSeries"), Tags("Series")]
public static class StairStepSeriesExamples
{
[Example("StairStepSeries")]
[DocumentationExample("Series/StairStepSeries")]
public static PlotModel StairStepSeries()
{
return CreateExampleModel(new StairStepSeries());
}
[Example("StairStepSeries with labels")]
public static PlotModel StairStepSeriesWithLabels()
{
return CreateExampleModel(new StairStepSeries { LabelFormatString = "{1:0.00}" });
}
[Example("StairStepSeries with markers")]
public static PlotModel StairStepSeriesWithMarkers()
{
return CreateExampleModel(new StairStepSeries
{
Color = OxyColors.SkyBlue,
MarkerType = MarkerType.Circle,
MarkerSize = 6,
MarkerStroke = OxyColors.White,
MarkerFill = OxyColors.SkyBlue,
MarkerStrokeThickness = 1.5
});
}
[Example("StairStepSeries with thin vertical lines")]
public static PlotModel StairStepSeriesThinVertical()
{
return CreateExampleModel(new StairStepSeries
{
StrokeThickness = 3,
VerticalStrokeThickness = 0.4,
MarkerType = MarkerType.None
});
}
[Example("StairStepSeries with dashed vertical lines")]
public static PlotModel StairStepSeriesDashedVertical()
{
return CreateExampleModel(new StairStepSeries
{
VerticalLineStyle = LineStyle.Dash,
MarkerType = MarkerType.None
});
}
[Example("StairStepSeries with invalid points")]
public static PlotModel StairStepSeriesWithInvalidPoints()
{
var model = new PlotModel
{
Title = "StairStepSeries with invalid points",
Subtitle = "Horizontal lines do not continue",
};
PopulateInvalidPointExampleModel(model, x => DataPoint.Undefined);
return model;
}
[Example("StairStepSeries with invalid Y")]
public static PlotModel StairStepSeriesWithInvalidY()
{
var model = new PlotModel
{
Title = "StairStepSeries with invalid Y",
Subtitle = "Horizontal lines continue until X of point with invalid Y",
};
PopulateInvalidPointExampleModel(model, x => new DataPoint(x, double.NaN));
return model;
}
[Example("StairStepSeries with non-monotonic X")]
public static PlotModel StairStepSeriesWithNonmonotonicX()
{
var model = new PlotModel
{
Title = "StairStepSeries with non-monotonic X",
Subtitle = "Lines form a boxed I-beam",
};
var iBeamSeries = new StairStepSeries
{
MarkerType = MarkerType.Circle,
VerticalLineStyle = LineStyle.Dash,
VerticalStrokeThickness = 4,
};
iBeamSeries.Points.Add(new DataPoint(1, 1));
iBeamSeries.Points.Add(new DataPoint(3, 1));
iBeamSeries.Points.Add(new DataPoint(2, 3));
iBeamSeries.Points.Add(new DataPoint(1, 3));
iBeamSeries.Points.Add(new DataPoint(3, 3));
model.Series.Add(iBeamSeries);
var boxBRSeries = new StairStepSeries
{
MarkerType = MarkerType.Circle,
VerticalLineStyle = LineStyle.Dash,
VerticalStrokeThickness = 4,
};
boxBRSeries.Points.Add(new DataPoint(1, 0));
boxBRSeries.Points.Add(new DataPoint(2, 0));
boxBRSeries.Points.Add(new DataPoint(0, 0));
boxBRSeries.Points.Add(new DataPoint(4, 0));
boxBRSeries.Points.Add(new DataPoint(4, 4));
model.Series.Add(boxBRSeries);
var boxTLSeries = new StairStepSeries
{
MarkerType = MarkerType.Circle,
VerticalLineStyle = LineStyle.Dash,
VerticalStrokeThickness = 4,
};
boxTLSeries.Points.Add(new DataPoint(3, 4));
boxTLSeries.Points.Add(new DataPoint(2, 4));
boxTLSeries.Points.Add(new DataPoint(4, 4));
boxTLSeries.Points.Add(new DataPoint(0, 4));
boxTLSeries.Points.Add(new DataPoint(0, 0));
model.Series.Add(boxTLSeries);
return model;
}
///
/// Creates an example model and fills the specified series with points.
///
/// The series.
/// A plot model.
private static PlotModel CreateExampleModel(DataPointSeries series)
{
var model = new PlotModel { Title = "StairStepSeries" };
var l = new Legend
{
LegendSymbolLength = 24
};
model.Legends.Add(l);
series.Title = "sin(x)";
for (double x = 0; x < Math.PI * 2; x += 0.5)
{
series.Points.Add(new DataPoint(x, Math.Sin(x)));
}
model.Series.Add(series);
return model;
}
private static void PopulateInvalidPointExampleModel(PlotModel model, Func getInvalidPoint)
{
model.Legends.Add(new Legend()
{
LegendOrientation = LegendOrientation.Horizontal,
LegendPlacement = LegendPlacement.Outside,
LegendPosition = LegendPosition.BottomCenter,
});
var series1 = new StairStepSeries
{
Title = "Invalid First Point",
MarkerType = MarkerType.Circle,
};
series1.Points.Add(getInvalidPoint(0));
series1.Points.Add(new DataPoint(1, 3.5));
series1.Points.Add(new DataPoint(2, 4.0));
series1.Points.Add(new DataPoint(3, 4.5));
model.Series.Add(series1);
var series2 = new StairStepSeries
{
Title = "Invalid Second Point",
MarkerType = MarkerType.Circle,
};
series2.Points.Add(new DataPoint(0, 2.0));
series2.Points.Add(getInvalidPoint(1));
series2.Points.Add(new DataPoint(2, 3.0));
series2.Points.Add(new DataPoint(3, 3.5));
model.Series.Add(series2);
var series3 = new StairStepSeries
{
Title = "Invalid Penultimate Point",
MarkerType = MarkerType.Circle,
};
series3.Points.Add(new DataPoint(0, 1.0));
series3.Points.Add(new DataPoint(1, 1.5));
series3.Points.Add(getInvalidPoint(2));
series3.Points.Add(new DataPoint(3, 2.5));
model.Series.Add(series3);
var series4 = new StairStepSeries
{
Title = "Invalid Last Point",
MarkerType = MarkerType.Circle,
};
series4.Points.Add(new DataPoint(0, 0.0));
series4.Points.Add(new DataPoint(1, 0.5));
series4.Points.Add(new DataPoint(2, 1.0));
series4.Points.Add(getInvalidPoint(3));
model.Series.Add(series4);
}
}
}