AirScout/OxyPlot/Source/Examples/ExampleLibrary/CustomSeries/CustomSeriesExamples.cs

259 wiersze
9.3 KiB
C#

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="CustomSeriesExamples.cs" company="OxyPlot">
// Copyright (c) 2014 OxyPlot contributors
// </copyright>
// --------------------------------------------------------------------------------------------------------------------
namespace ExampleLibrary
{
using System;
using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;
[Examples("Custom series"), Tags("Series")]
public static class CustomSeriesExamples
{
[Example("ErrorSeries")]
public static PlotModel ErrorSeries()
{
int n = 20;
var model = new PlotModel { Title = "ErrorSeries", LegendPosition = LegendPosition.BottomRight };
var s1 = new ErrorSeries { Title = "Measurements" };
var random = new Random(31);
double x = 0;
double y = 0;
for (int i = 0; i < n; i++)
{
x += 2 + (random.NextDouble() * 10);
y += 1 + random.NextDouble();
double xe = 1 + (random.NextDouble() * 2);
double ye = 1 + (random.NextDouble() * 2);
s1.Points.Add(new ErrorItem(x, y, xe, ye));
}
model.Series.Add(s1);
return model;
}
[Example("LineSegmentSeries")]
public static PlotModel LineSegmentSeries()
{
var model = new PlotModel { Title = "LineSegmentSeries" };
var lss1 = new LineSegmentSeries { Title = "The first series" };
// First segment
lss1.Points.Add(new DataPoint(0, 3));
lss1.Points.Add(new DataPoint(2, 3.2));
// Second segment
lss1.Points.Add(new DataPoint(2, 2.7));
lss1.Points.Add(new DataPoint(7, 2.9));
model.Series.Add(lss1);
var lss2 = new LineSegmentSeries { Title = "The second series" };
// First segment
lss2.Points.Add(new DataPoint(1, -3));
lss2.Points.Add(new DataPoint(2, 10));
// Second segment
lss2.Points.Add(new DataPoint(0, 4.8));
lss2.Points.Add(new DataPoint(7, 2.3));
// A very short segment
lss2.Points.Add(new DataPoint(6, 4));
lss2.Points.Add(new DataPoint(6, 4 + 1e-8));
model.Series.Add(lss2);
return model;
}
[Example("FlagSeries")]
public static PlotModel FlagSeries()
{
var model = new PlotModel { Title = "FlagSeries" };
var s1 = new FlagSeries { Title = "Incidents", Color = OxyColors.Red };
s1.Values.Add(2);
s1.Values.Add(3);
s1.Values.Add(5);
s1.Values.Add(7);
s1.Values.Add(11);
s1.Values.Add(13);
s1.Values.Add(17);
s1.Values.Add(19);
model.Series.Add(s1);
return model;
}
[Example("MatrixSeries - diagonal matrix")]
public static PlotModel DiagonalMatrix()
{
var model = new PlotModel();
var matrix = new double[3, 3];
matrix[0, 0] = 1;
matrix[1, 1] = 2;
matrix[2, 2] = 3;
// Reverse the vertical axis
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, StartPosition = 1, EndPosition = 0 });
model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom });
model.Series.Add(new MatrixSeries { Matrix = matrix, ShowDiagonal = true });
return model;
}
[Example("PolarHeatMap")]
public static PlotModel PolarHeatMap()
{
var model = new PlotModel { Title = "Polar heat map", PlotMargins = new OxyThickness(40, 80, 40, 40), PlotType = PlotType.Polar, PlotAreaBorderThickness = new OxyThickness(0) };
var matrix = new double[2, 2];
matrix[0, 0] = 0;
matrix[0, 1] = 2;
matrix[1, 0] = 1.5;
matrix[1, 1] = 0.2;
model.Axes.Add(new AngleAxis { StartAngle = 0, EndAngle = 360, Minimum = 0, Maximum = 360, MajorStep = 30, MinorStep = 15 });
model.Axes.Add(new MagnitudeAxis { Minimum = 0, Maximum = 100, MajorStep = 25, MinorStep = 5 });
model.Axes.Add(new LinearColorAxis { Position = AxisPosition.Right, Palette = OxyPalettes.Rainbow(500), HighColor = OxyColors.Gray, LowColor = OxyColors.Black });
model.Series.Add(new PolarHeatMapSeries { Data = matrix, Angle0 = 30, Angle1 = 150, Magnitude0 = 0, Magnitude1 = 80, Interpolate = false });
return model;
}
[Example("PolarHeatMap (interpolated)")]
public static PlotModel PolarHeatMapInterpolated()
{
var model = PolarHeatMap();
model.Title = "Polar heat map (interpolated)";
((PolarHeatMapSeries)model.Series[0]).Interpolate = true;
return model;
}
[Example("PolarHeatMap fixed size image")]
public static PlotModel PolarHeatMapFixed()
{
var model = PolarHeatMap();
model.Title = "Polar heat map with fixed size image";
((PolarHeatMapSeries)model.Series[0]).ImageSize = 800;
return model;
}
[Example("PolarHeatMap on linear axes")]
public static PlotModel PolarHeatMapLinearAxes()
{
var model = new PlotModel { Title = "Polar heat map on linear axes" };
var matrix = new double[2, 2];
matrix[0, 0] = 0;
matrix[0, 1] = 2;
matrix[1, 0] = 1.5;
matrix[1, 1] = 0.2;
model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = -100, Maximum = 100 });
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0, Maximum = 100 });
model.Axes.Add(new LinearColorAxis { Position = AxisPosition.Right, Palette = OxyPalettes.Rainbow(500), HighColor = OxyColors.Gray, LowColor = OxyColors.Black });
model.Series.Add(new PolarHeatMapSeries { Data = matrix, Angle0 = 30, Angle1 = 150, Magnitude0 = 0, Magnitude1 = 80, Interpolate = true });
return model;
}
[Example("PolarHeatMap linear axes, fixed size image (256x256)")]
public static PlotModel PolarHeatMapLinearAxesFixed256()
{
var model = PolarHeatMapLinearAxes();
model.Title = "Polar heat map on linear axes & fixed size image (256x256)";
((PolarHeatMapSeries)model.Series[0]).ImageSize = 256;
return model;
}
[Example("PolarHeatMap linear axes, fixed size image (1000x1000)")]
public static PlotModel PolarHeatMapLinearAxesFixed1000()
{
var model = PolarHeatMapLinearAxes();
model.Title = "Polar heat map on linear axes & fixed size image (1000x1000)";
((PolarHeatMapSeries)model.Series[0]).ImageSize = 1000;
return model;
}
[Example("Design structure matrix (DSM)")]
public static PlotModel DesignStructureMatrix()
{
// See also http://en.wikipedia.org/wiki/Design_structure_matrix
var data = new double[7, 7];
// indexing: data[column,row]
data[1, 0] = 1;
data[5, 0] = 1;
data[3, 1] = 1;
data[0, 2] = 1;
data[6, 2] = 1;
data[4, 3] = 1;
data[1, 4] = 1;
data[5, 4] = 1;
data[2, 5] = 1;
data[0, 6] = 1;
data[4, 6] = 1;
for (int i = 0; i < 7; i++)
{
data[i, i] = -1;
}
var model = new PlotModel { Title = "Design structure matrix (DSM)" };
model.Axes.Add(new LinearColorAxis { Position = AxisPosition.None, Palette = new OxyPalette(OxyColors.White, OxyColors.LightGreen), LowColor = OxyColors.Black, Minimum = 0, IsAxisVisible = false });
var topAxis = new CategoryAxis
{
Position = AxisPosition.Top
};
topAxis.Labels.AddRange(new[] { "A", "B", "C", "D", "E", "F", "G" });
model.Axes.Add(topAxis);
var leftAxis = new CategoryAxis
{
Position = AxisPosition.Left,
StartPosition = 1,
EndPosition = 0
};
leftAxis.Labels.AddRange(new[] { "Element A", "Element B", "Element C", "Element D", "Element E", "Element F", "Element G" });
model.Axes.Add(leftAxis);
var hms = new DesignStructureMatrixSeries
{
Data = data,
Interpolate = false,
LabelFormatString = "#",
LabelFontSize = 0.25,
X0 = 0,
X1 = data.GetLength(0) - 1,
Y0 = 0,
Y1 = data.GetLength(1) - 1,
};
model.Series.Add(hms);
return model;
}
}
public class DesignStructureMatrixSeries : HeatMapSeries
{
protected override string GetLabel(double v, int i, int j)
{
if (i == j)
{
return ((CategoryAxis)this.XAxis).Labels[i];
}
return base.GetLabel(v, i, j);
}
}
}