Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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]);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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");
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
                }
        }
Ejemplo n.º 11
0
        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"));
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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); });
        }
Ejemplo n.º 16
0
        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());
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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(); });
        }
Ejemplo n.º 20
0
        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(); });
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
 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();
     }
 }
Ejemplo n.º 23
0
        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);
        }
Ejemplo n.º 24
0
        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); });
        }
Ejemplo n.º 25
0
        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);
        }
Ejemplo n.º 26
0
        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();
        }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
        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());
        }
Ejemplo n.º 29
0
 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);
 }
Ejemplo n.º 30
0
        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);
        }