79 lines
3.2 KiB
C#
79 lines
3.2 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.DataVisualization.Charting;
|
|
|
|
namespace FeatureVectorCalculator
|
|
{
|
|
public class SignalChart
|
|
{
|
|
public static Chart GetChart(float[] data, float period, string caption, string captionY, bool fromZero = true,
|
|
PointF[] extendedOutliers = null, PointF[] outliers = null)
|
|
{
|
|
Series series1 = null, series2 = null, series3 = null;
|
|
|
|
series1 = new Series { Name = caption, ChartArea = "area1", ChartType = SeriesChartType.Line, Color = Color.DeepSkyBlue };
|
|
float minY = float.MaxValue;
|
|
float maxY = float.MinValue;
|
|
for (int x = 0; x < data.Length; x++)
|
|
{
|
|
float y = data[x];
|
|
if (minY > y) minY = y;
|
|
if (maxY < y) maxY = y;
|
|
series1.Points.AddXY(x * period, y);
|
|
}
|
|
|
|
if (extendedOutliers != null)
|
|
{
|
|
series2 = new Series { Name = "extended outliers", ChartArea = "area1", ChartType = SeriesChartType.Point, Color = Color.Yellow };
|
|
for (int i = 0; i < extendedOutliers.Length; i++)
|
|
{
|
|
series2.Points.AddXY(extendedOutliers[i].X * period, extendedOutliers[i].Y);
|
|
}
|
|
}
|
|
|
|
if (outliers != null)
|
|
{
|
|
series3 = new Series { Name = "outliers", ChartArea = "area1", ChartType = SeriesChartType.Point, Color = Color.DarkRed };
|
|
for (int i = 0; i < outliers.Length; i++)
|
|
{
|
|
series3.Points.AddXY(outliers[i].X * period, outliers[i].Y);
|
|
}
|
|
}
|
|
|
|
ChartArea chArea = new ChartArea { Name = "area1" };
|
|
chArea.AxisX.Title = "Time [s]";
|
|
chArea.AxisX.IsLogarithmic = false;
|
|
chArea.AxisX.IsLabelAutoFit = true;
|
|
chArea.AxisX.Minimum = 0;
|
|
chArea.AxisX.Maximum = (data.Length - 1) * period;
|
|
// for (int j = i; j < i + 3; j++)
|
|
// {
|
|
// CustomLabel cl = new CustomLabel();
|
|
// cl.Text = string.Format("{0} {1}", xs[j], flowUnit.ToDescription());
|
|
// cl.FromPosition = Math.Log10(xs[j] * spacer);
|
|
// cl.ToPosition = Math.Log10(xs[j] / spacer);
|
|
// chArea.AxisX.CustomLabels.Add(cl);
|
|
// }
|
|
chArea.AxisY.Title = captionY;
|
|
chArea.AxisY.IsLogarithmic = false;
|
|
chArea.AxisY.IsLabelAutoFit = true;
|
|
chArea.AxisY.IsStartedFromZero = fromZero;
|
|
chArea.AxisY.Minimum = chArea.AxisY.IsStartedFromZero ? 0 : minY;
|
|
chArea.AxisY.Maximum = 1.1 * maxY;
|
|
if (chArea.AxisY.Maximum == chArea.AxisY.Minimum)
|
|
{
|
|
chArea.AxisY.Maximum = chArea.AxisY.Maximum + 1;
|
|
}
|
|
|
|
Chart chart = new Chart { Text = caption, Dock = DockStyle.Fill };
|
|
chart.ChartAreas.Add(chArea);
|
|
chart.Series.Add(series1);
|
|
if (series2 != null) chart.Series.Add(series2);
|
|
if (series3 != null) chart.Series.Add(series3);
|
|
|
|
return chart;
|
|
}
|
|
}
|
|
}
|