public void Test_scatter_benchmark() { int[] pointCounts = { 1000, 100, 10 }; const int REPS = 10; Random rand = new(0); for (int i = 0; i < pointCounts.Length; i++) { int pointCount = pointCounts[i]; var plt = new ScottPlot.Plot(); double[] xs = DataGen.Random(rand, pointCount); double[] ys = DataGen.RandomWalk(rand, pointCount); plt.AddScatter(xs, ys); plt.Render(lowQuality: true); for (int j = 0; j < REPS; j++) { plt.Render(lowQuality: true); } double[] renderTimes = plt.BenchmarkTimes(); Assert.AreEqual(REPS + 1, renderTimes.Length); double meanTime = renderTimes.Sum() / renderTimes.Length; Console.WriteLine($"Rendered {pointCount} points in {meanTime:N2} ms (n={renderTimes.Length})"); } }
public void Test_SaveFig_OutputScaling() { var plt = new ScottPlot.Plot(); plt.AddSignal(DataGen.Sin(51), label: "sin"); plt.AddSignal(DataGen.Cos(51), label: "cos"); plt.Title("Scaled Figure Demo"); plt.XLabel("Horizontal Axis"); plt.YLabel("Vertical Axis"); plt.Legend(); System.Drawing.Bitmap bmpA = plt.Render(400, 300); Assert.AreEqual(400, bmpA.Width); Assert.AreEqual(300, bmpA.Height); System.Drawing.Bitmap bmpB = plt.Render(400, 300, scale: .5); Assert.AreEqual(200, bmpB.Width); Assert.AreEqual(150, bmpB.Height); System.Drawing.Bitmap bmpC = plt.Render(400, 300, scale: 2); Assert.AreEqual(800, bmpC.Width); Assert.AreEqual(600, bmpC.Height); System.Drawing.Bitmap bmpD = plt.Render(300, 400, scale: 2); Assert.AreEqual(600, bmpD.Width); Assert.AreEqual(800, bmpD.Height); System.Drawing.Bitmap legendNormal = plt.RenderLegend(); System.Drawing.Bitmap legendBig = plt.RenderLegend(scale: 2); Assert.Greater(legendBig.Width, legendNormal.Width); Assert.Greater(legendBig.Height, legendNormal.Height); }
public void Test_RGB_analysis() { Random rand = new Random(0); double[] ys = DataGen.RandomWalk(rand, 100); var plt = new ScottPlot.Plot(400, 300); plt.Style(figBg: System.Drawing.Color.Gray, dataBg: System.Drawing.Color.Gray); plt.PlotSignal(ys, yOffset: 0, color: System.Drawing.Color.FromArgb(255, 0, 0), label: "red", lineWidth: 2); plt.PlotSignal(ys, yOffset: 1, color: System.Drawing.Color.FromArgb(0, 255, 0), label: "green", lineWidth: 3); plt.PlotSignal(ys, yOffset: 2, color: System.Drawing.Color.FromArgb(0, 0, 255), label: "blue", lineWidth: 4); plt.PlotSignal(ys, yOffset: 3, color: System.Drawing.Color.FromArgb(0, 0, 0), label: "black"); plt.PlotSignal(ys, yOffset: 4, color: System.Drawing.Color.FromArgb(255, 255, 255), label: "white"); plt.Legend(); System.Drawing.Bitmap bmp = plt.Render(); var means = MeanPixel(bmp); Console.WriteLine($"mean bitmap intensity (ARGB): {means.A}, {means.R}, {means.G}, {means.B}"); // mean bitmap intensity (ARGB): 255, 123.4157, 124.8481, 126.327066666667 Assert.AreEqual(means.A, 255); // image is not transparent Assert.Greater(means.B, means.G); // blue line is thicker than green line Assert.Greater(means.G, means.R); // green line is thicker than red line }
public void Test_Axis_ExtremelySmallSpan() { var plt = new ScottPlot.Plot(600, 400); plt.AddLine(0, 1, 1, 1.0000000000000001); plt.Render(); }
static void Main() { Console.WriteLine("Plotting..."); var plt = new ScottPlot.Plot(600, 400); plt.PlotLine(0, 1, 1, 1.0000000000000009); plt.Render(); Console.WriteLine("Done!"); }
public void Test_AutoAxis_WorksAfterClear() { var plt = new ScottPlot.Plot(); plt.PlotPoint(0.1, 0.1); plt.PlotPoint(-0.1, -0.1); plt.AxisAuto(); plt.Render(); // force a render Assert.Greater(plt.GetAxisLimits().XMin, -5); plt.PlotPoint(999, 999); plt.PlotPoint(-999, -999); plt.AxisAuto(); plt.Render(); // force a render Assert.Less(plt.GetAxisLimits().XMin, -800); plt.Clear(); plt.PlotPoint(0.1, 0.1); plt.PlotPoint(-0.1, -0.1); plt.Render(); // force a render Assert.Greater(plt.GetAxisLimits().XMin, -5); }
public void Test_MultiAxis_AutoAxis() { double[] xs = { 1, 2, 3 }; double[] ys = { 4, 5, 6 }; var plt = new ScottPlot.Plot(400, 300); var sp = plt.AddScatter(xs, ys); sp.YAxisIndex = 1; sp.XAxisIndex = 1; plt.Render(); var limitsA = plt.GetAxisLimits(1, 1); xs[0] = 999; ys[0] = 999; plt.AxisAuto(0.05, .01, 1, 1); plt.Render(); var limitsB = plt.GetAxisLimits(1, 1); Assert.Greater(limitsB.XMax, limitsA.XMax); Assert.Greater(limitsB.YMax, limitsA.YMax); }
public void Test_scatter_10kPoints() { double[] pointCounts = { 10, 100, 1000, 10000 }; const int REPS = 10; double[] speeds = new double[pointCounts.Length]; for (int i = 0; i < pointCounts.Length; i++) { int pointCount = (int)pointCounts[i]; var plt = new ScottPlot.Plot(); Random rand = new Random(0); double[] xs = DataGen.Random(rand, pointCount); double[] ys = DataGen.RandomWalk(rand, pointCount); plt.AddScatter(xs, ys); plt.Render(lowQuality: true); List <double> times = new List <double>(); for (int j = 0; j < REPS; j++) { plt.Render(lowQuality: true); times.Add(plt.GetSettings(false).BenchmarkMessage.MSec); } var stats = new ScottPlot.Statistics.Population(times.ToArray()); speeds[i] = stats.mean; Console.WriteLine($"Rendered {pointCount} points in {stats.mean} ms"); } var plt2 = new ScottPlot.Plot(400, 300); plt2.Title("Scatter Plot Benchmark"); plt2.YLabel("Time (ms)"); plt2.XLabel("Number of Points"); plt2.AddScatter(pointCounts, speeds); TestTools.SaveFig(plt2); }
public void Test_Scatter_SinglePoint() { // https://github.com/ScottPlot/ScottPlot/issues/948 var plt = new ScottPlot.Plot(); plt.AddScatter( xs: new double[1] { 0 }, ys: new double[1] { 2 }, markerSize: 1, lineWidth: 1); plt.Render(); }
public void Render(bool skipIfCurrentlyRendering = false, bool lowQuality = false, bool recalculateLayout = false, bool processEvents = false) { if (isDesignerMode || plt is null || imagePlot.Width < 1 || imagePlot.Height < 1) { return; } if (!(skipIfCurrentlyRendering && currentlyRendering)) { currentlyRendering = true; imagePlot.Source = BmpImageFromBmp(plt.Render(lowQuality || lowQualityAlways)); if (isPanningOrZooming || isMovingDraggable || processEvents) { DoEvents(); } currentlyRendering = false; Rendered?.Invoke(null, null); } }