public void Test_MutiAxis_AllSides() { // plot data using 4 different vertical axis indexes var plt = new ScottPlot.Plot(); var sig1 = plt.AddSignal(ScottPlot.DataGen.Sin(51, mult: 1, phase: 0), sampleRate: 1); var sig2 = plt.AddSignal(ScottPlot.DataGen.Sin(51, mult: 10, phase: -.1), sampleRate: .1); var sig3 = plt.AddSignal(ScottPlot.DataGen.Sin(51, mult: 100, phase: -.2), sampleRate: .01); var sig4 = plt.AddSignal(ScottPlot.DataGen.Sin(51, mult: 1000, phase: -.3), sampleRate: .001); sig1.YAxisIndex = 0; sig2.YAxisIndex = 1; sig3.YAxisIndex = 2; sig4.YAxisIndex = 3; sig1.XAxisIndex = 0; sig2.XAxisIndex = 1; sig3.XAxisIndex = 2; sig4.XAxisIndex = 3; // by default ther are already 4 axes, so customize them all plt.XAxis.Label("Primary Bottom Axis", color: sig1.Color); plt.YAxis.Label("Primary Left Axis", color: sig1.Color); plt.XAxis2.Label("Primary Top Axis", color: sig2.Color); plt.YAxis2.Label("Primary Right Axis", color: sig2.Color); // create a new axis for each side plt.AddAxis(ScottPlot.Renderable.Edge.Bottom, 2, "Secondary Bottom Axis", sig3.Color); plt.AddAxis(ScottPlot.Renderable.Edge.Left, 2, "Secondary Left Axis", sig3.Color); plt.AddAxis(ScottPlot.Renderable.Edge.Top, 3, "Secondary Top Axis", sig4.Color); plt.AddAxis(ScottPlot.Renderable.Edge.Right, 3, "Secondary Right Axis", sig4.Color); TestTools.SaveFig(plt); }
public void Test_Axis_FramelessShowsGridLines() { var plt = new ScottPlot.Plot(400, 300); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); plt.Frameless(); // start with default settings var bmp1 = TestTools.GetLowQualityBitmap(plt); //TestTools.SaveFig(bmp1, "1"); // make the grid darker plt.Grid(color: System.Drawing.Color.Black); var bmp2 = TestTools.GetLowQualityBitmap(plt); //TestTools.SaveFig(bmp2, "2"); // measure what changed var before = new MeanPixel(bmp1); var after = new MeanPixel(bmp2); Console.WriteLine($"Before: {before}"); Console.WriteLine($"After: {after}"); Assert.That(after.IsDarkerThan(before)); }
public void Test_AntiAliasing_Works() { var plt = new ScottPlot.Plot(400, 300); plt.AddSignal(ScottPlot.DataGen.Sin(51), label: "sin"); plt.AddSignal(ScottPlot.DataGen.Cos(51), label: "cos"); plt.YLabel("Vertical Axis"); plt.XLabel("Horizontal Axis"); plt.Title("Plot Title"); plt.Legend(); // start with default settings var bmp1 = plt.Render(lowQuality: true); // change the plottable var bmp2 = plt.Render(lowQuality: false); // measure what changed //TestTools.SaveFig(bmp1, "1"); //TestTools.SaveFig(bmp2, "2"); var before = new MeanPixel(bmp1); var after = new MeanPixel(bmp2); Assert.That(after.IsDifferentThan(before)); }
public void Test_Move_Works() { Random rand = new(0); var plt = new ScottPlot.Plot(); var sig1 = plt.AddSignal(ScottPlot.DataGen.Random(rand, 100)); var sig2 = plt.AddSignal(ScottPlot.DataGen.Random(rand, 100)); var sig3 = plt.AddSignal(ScottPlot.DataGen.Random(rand, 100)); var sig4 = plt.AddSignal(ScottPlot.DataGen.Random(rand, 100)); var sig5 = plt.AddSignal(ScottPlot.DataGen.Random(rand, 100)); Assert.AreEqual(sig1, plt.GetPlottables()[0]); Assert.AreEqual(sig2, plt.GetPlottables()[1]); Assert.AreEqual(sig3, plt.GetPlottables()[2]); Assert.AreEqual(sig4, plt.GetPlottables()[3]); Assert.AreEqual(sig5, plt.GetPlottables()[4]); plt.Move(2, 1); Assert.AreEqual(sig1, plt.GetPlottables()[0]); Assert.AreEqual(sig3, plt.GetPlottables()[1]); Assert.AreEqual(sig2, plt.GetPlottables()[2]); Assert.AreEqual(sig4, plt.GetPlottables()[3]); Assert.AreEqual(sig5, plt.GetPlottables()[4]); plt.Move(2, 4); Assert.AreEqual(sig1, plt.GetPlottables()[0]); Assert.AreEqual(sig3, plt.GetPlottables()[1]); Assert.AreEqual(sig4, plt.GetPlottables()[2]); Assert.AreEqual(sig5, plt.GetPlottables()[3]); Assert.AreEqual(sig2, plt.GetPlottables()[4]); }
public void Test_Render_Scaling() { System.Drawing.Bitmap bmp = new(600, 400); var plt = new ScottPlot.Plot(); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); plt.Render(bmp, scale: 1.5); TestTools.SaveBitmap(bmp); }
public void Test_AxisAuto_AdjustsAllAxes() { var plt = new ScottPlot.Plot(400, 300); var sig1 = plt.AddSignal(ScottPlot.DataGen.Sin(51)); sig1.XAxisIndex = 0; sig1.YAxisIndex = 0; var sig2 = plt.AddSignal(ScottPlot.DataGen.Cos(51)); sig2.XAxisIndex = 1; sig2.YAxisIndex = 1; // on startup all axes are reset with AxisAuto() plt.Render(); plt.AxisAuto(); var originalLimitsPrimary = plt.GetAxisLimits(0); var originalLimitsSecondary = plt.GetAxisLimits(1); // zoom out on all axes plt.AxisZoom(.1, .1, xAxisIndex: 0, yAxisIndex: 0); plt.AxisZoom(.1, .1, xAxisIndex: 1, yAxisIndex: 1); var zoomedOutLimitsPrimary = plt.GetAxisLimits(0); Assert.Greater(zoomedOutLimitsPrimary.XSpan, originalLimitsPrimary.XSpan); Assert.Greater(zoomedOutLimitsPrimary.YSpan, originalLimitsPrimary.YSpan); var zoomedOutLimitsSecondary = plt.GetAxisLimits(1); Assert.Greater(zoomedOutLimitsSecondary.XSpan, originalLimitsSecondary.XSpan); Assert.Greater(zoomedOutLimitsSecondary.YSpan, originalLimitsSecondary.YSpan); // call AxisAuto() which is now expected to act on all axes plt.AxisAuto(); var resetLimitsPrimary = plt.GetAxisLimits(0); var resetLimitsSecondary = plt.GetAxisLimits(1); Assert.AreEqual(resetLimitsPrimary.XSpan, originalLimitsPrimary.XSpan); Assert.AreEqual(resetLimitsPrimary.YSpan, originalLimitsPrimary.YSpan); Assert.AreEqual(resetLimitsSecondary.XSpan, originalLimitsSecondary.XSpan); Assert.AreEqual(resetLimitsSecondary.YSpan, originalLimitsSecondary.YSpan); TestTools.SaveFig(plt); //var limits = plt.GetAxisLimits(); //Console.WriteLine(limits); }
public void Test_RemoveAxis_Works() { var plt = new ScottPlot.Plot(600, 400); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); var extraAxis = plt.AddAxis(ScottPlot.Renderable.Edge.Left, axisIndex: 2); TestTools.SaveFig(plt, "a"); plt.RemoveAxis(extraAxis); TestTools.SaveFig(plt, "b"); }
public void Test_Legend_RendersWithoutLabels() { var plt = new ScottPlot.Plot(); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); var leg = plt.Legend(); System.Drawing.Bitmap bmp = plt.RenderLegend(); Assert.AreEqual(1, bmp.Width); Assert.AreEqual(1, bmp.Height); Assert.False(leg.HasItems); Assert.AreEqual(0, leg.Count); Assert.AreEqual(0, leg.GetItems().Length); }
public void Test_GetBitmapBytes_IsValidPng() { string outputFilePath = Path.GetFullPath("imageBytes.png"); var plt = new ScottPlot.Plot(321, 123); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); byte[] bytes = plt.GetImageBytes(); File.WriteAllBytes(outputFilePath, bytes); var bmp = new System.Drawing.Bitmap(outputFilePath); Assert.AreEqual(plt.Width, bmp.Width); Assert.AreEqual(plt.Height, bmp.Height); }
public void Test_MultiPlot_MatchAxis() { // render each subplot as a Bitmap var plt1 = new ScottPlot.Plot(300, 250); plt1.AddSignal(ScottPlot.DataGen.Sin(51)); plt1.Title("Subplot A"); System.Drawing.Bitmap bmp1 = plt1.Render(); var plt2 = new ScottPlot.Plot(300, 250); plt2.AddSignal(ScottPlot.DataGen.Cos(51)); plt2.Title("Subplot B"); System.Drawing.Bitmap bmp2 = plt2.Render(); // combine subplot bitmaps into one large bitmap using (var bmp = new System.Drawing.Bitmap(600, 250)) using (var gfx = System.Drawing.Graphics.FromImage(bmp)) { gfx.DrawImage(bmp1, 0, 0); gfx.DrawImage(bmp2, 300, 0); //bmp.Save("test.bmp"); TestTools.SaveFig(bmp); } }
public void Test_Style_CreateThenModify() { double[] xs = { 1, 2, 3, 4, 5 }; double[] ys = { 1, 4, 9, 16, 25 }; var plt = new ScottPlot.Plot(400, 300); // initialize with thin green line and diamond markers var scatter = plt.AddScatter(xs: xs, ys: ys, color: System.Drawing.Color.Green, lineWidth: 2, markerSize: 10, markerShape: ScottPlot.MarkerShape.filledDiamond); // modify for thick magenta line and circle markers scatter.LineWidth = 10; scatter.Color = System.Drawing.Color.Magenta; scatter.MarkerSize = 20; scatter.MarkerShape = ScottPlot.MarkerShape.filledCircle; // do the same for a scatter plot var signal = plt.AddSignal(ys: ys, color: System.Drawing.Color.Green); signal.OffsetY = 5; signal.LineWidth = 10; signal.Color = System.Drawing.Color.Orange; signal.MarkerSize = 20; string name = System.Reflection.MethodBase.GetCurrentMethod().Name; plt.SaveFig(System.IO.Path.GetFullPath(name + ".png")); }
public void Test_Legend_RendersWithoutRenderingPlotFirst() { var plt = new ScottPlot.Plot(); plt.AddSignal(ScottPlot.DataGen.Sin(51), label: "test"); System.Drawing.Bitmap bmp = plt.RenderLegend(); TestTools.SaveBitmap(bmp); }
public void Test_Render_Html() { var plt = new ScottPlot.Plot(400, 300); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); string b64 = plt.GetImageBase64(); Assert.Greater(b64.Length, 1000); string img = plt.GetImageHTML(); Assert.Greater(img.Length, b64.Length); TestTools.SaveHtml(img); }
public void Test_CrossHair_Renders() { var plt = new ScottPlot.Plot(400, 300); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); plt.Title("Crosshair Demo"); plt.XLabel("Horizontal Axis"); plt.YLabel("Vertical Axis"); plt.AddCrosshair(42, 0.45); // this is outside the data area so should not be rendered plt.AddCrosshair(-5, -1.2); TestTools.SaveFig(plt); }
public void Test_Legend_GettingBitmapBeforeRenderThrows() { var plt = new ScottPlot.Plot(); plt.AddSignal(ScottPlot.DataGen.Sin(51), label: "test"); var leg = plt.Legend(); Assert.Throws <InvalidOperationException>(() => { leg.GetBitmap(false); }); }
public void Signal_RenderHighDensityParallel_NotThrows() { double[] TestArray = Enumerable.Range(0, 5000).Select(x => Math.Sin(x / 10)).ToArray(); var plt = new ScottPlot.Plot(800, 400); plt.AddSignal(TestArray); Assert.DoesNotThrow(() => plt.Render()); }
public void Test_Legend_RendersWithoutRenderingPlotFirst() { var plt = new ScottPlot.Plot(); plt.AddSignal(ScottPlot.DataGen.Sin(51), label: "test"); System.Drawing.Bitmap bmp = plt.RenderLegend(); Assert.AreNotEqual(1, bmp.Width); Assert.AreNotEqual(1, bmp.Height); }
public void Signal(double[] ys, double xStart, double xEnd, double expectedMin, double expectedMax) { var plt = new ScottPlot.Plot(); var sig = plt.AddSignal(ys); (double yMin, double yMax) = sig.GetYDataRange(xStart, xEnd); Assert.AreEqual(expectedMin, yMin); Assert.AreEqual(expectedMax, yMax); }
public void Test_Render_YIsAllNan() { double[] ys = { double.NaN, double.NaN, double.NaN, double.NaN, double.NaN }; var plt = new ScottPlot.Plot(); plt.AddSignal(ys); Assert.Throws <InvalidOperationException>(() => { plt.AxisAuto(); }); }
public void Test_Render_YHasNanPixel() { double[] ys = { 1, 4, double.NaN, 16, 25 }; var plt = new ScottPlot.Plot(); plt.AddSignal(ys); Assert.DoesNotThrow(() => { plt.AxisAuto(); }); Assert.Throws <InvalidOperationException>(() => { plt.Render(); }); }
public void Test_Signal_FillAboveMethod() { var plt = new ScottPlot.Plot(400, 300); double[] ys = ScottPlot.DataGen.RandomWalk(new Random(0), 10); var sig = plt.AddSignal(ys); sig.FillAbove(); TestTools.SaveFig(plt); }
public static void ContinuouslyModifyPlottables(object data) { ScottPlot.Plot plt = (ScottPlot.Plot)data; while (ContinueModifyingPlottables) { plt.RenderLock(); plt.Clear(); plt.AddSignal(new double[] { 1, 2, 3 }); plt.RenderUnlock(); } }
public void Test_SmallPlot_WithAxisLabels() { var plt = new ScottPlot.Plot(250, 175); plt.Style(figureBackground: Color.WhiteSmoke); plt.AddSignal(ScottPlot.DataGen.Sin(100)); plt.Title("Small Plot Title"); plt.XLabel("Horizontal Axis"); plt.YLabel("Vertical Axis"); TestTools.SaveFig(plt); }
public void Test_Validate_YContainsInf() { double[] ys = { 1, 4, double.PositiveInfinity, 16, 25 }; var plt = new ScottPlot.Plot(); plt.AddSignal(ys); Assert.DoesNotThrow(() => { plt.Validate(deep: false); }); Assert.Throws <InvalidOperationException>(() => { plt.Validate(deep: true); }); }
public void Test_Signal_FillAboveAndBelowMethod() { var plt = new ScottPlot.Plot(400, 300); double[] ys = ScottPlot.DataGen.RandomWalk(new Random(0), 10); var sig = plt.AddSignal(ys); sig.FillAboveAndBelow(System.Drawing.Color.Magenta, System.Drawing.Color.Green); sig.BaselineY = 1.5; TestTools.SaveFig(plt); }
public void Test_Render_AllValid() { double[] ys = { 1, 4, 9, 16, 25 }; var plt = new ScottPlot.Plot(); plt.AddSignal(ys); TestTools.SaveFig(plt); Assert.Pass(); }
public void Test_Legend_GettingBitmapBeforeRenderThrows() { var plt = new ScottPlot.Plot(); plt.AddSignal(ScottPlot.DataGen.Sin(51), label: "test"); var leg = plt.Legend(); System.Drawing.Bitmap bmp = leg.GetBitmap(); Assert.AreEqual(1, bmp.Width); Assert.AreEqual(1, bmp.Height); }
public void Signal_RenderHighDensityDistributionParallel_NotThrows() { double[] TestArray = Enumerable.Range(0, 5000).Select(x => Math.Sin(x / 10)).ToArray(); Color[] Levels = new Color[] { Color.Red, Color.Green, Color.Red }; var plt = new ScottPlot.Plot(800, 400); var sig = plt.AddSignal(TestArray); sig.DensityColors = Levels; Assert.DoesNotThrow(() => plt.Render()); }
public static void ContinuouslyModifyPlottables(object data) { ScottPlot.Plot plt = (ScottPlot.Plot)data; while (ContinueModifyingPlottables) { plt.RenderLock(); plt.Clear(); plt.AddSignal(new double[] { 1, 2, 3 }); plt.RenderUnlock(); } Debug.WriteLine("Modification thread shutting down..."); Thread.Sleep(100); }
public void Test_View_LimitsOuter() { var plt = new ScottPlot.Plot(400, 300); plt.AddSignal(ScottPlot.DataGen.Sin(51)); plt.AddSignal(ScottPlot.DataGen.Cos(51)); plt.SetOuterViewLimits(xMin: -123, xMax: 123, yMin: -13, yMax: 13); TestTools.SaveFig(plt, "1"); for (int i = 0; i < 10; i++) { plt.AxisZoom(.5, .5); } TestTools.SaveFig(plt, "2"); var limits2 = plt.GetAxisLimits(); Assert.GreaterOrEqual(limits2.XMin, -123); Assert.GreaterOrEqual(limits2.XMax, 123); Assert.GreaterOrEqual(limits2.YMin, -13); Assert.GreaterOrEqual(limits2.YMax, 13); }