Example #1
0
        public Plot2D(InteractivePlotSurface2D plotSurface)
        {
            this.plotSurface2D = plotSurface;

            pen    = new Pen(Color.Red, PenWidth);
            marker = new Marker(Marker.MarkerType.FilledCircle, MarkerSize, Color.Blue);
        }
Example #2
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            double[] data  = new double[] { 0, 4, 3, 2, 5, 4, 2, 3 };
            double[] data2 = new double[] { 5, 2, 4, 1, 2, 1, 5, 3 };

            HistogramPlot hp = new HistogramPlot();

            hp.OrdinateData   = data;
            hp.RectangleBrush = RectangleBrushes.Horizontal.FaintRedFade;
            hp.Filled         = true;
            hp.BaseOffset     = -0.15;
            hp.BaseWidth      = 0.25f;

            HistogramPlot hp2 = new HistogramPlot();

            hp2.OrdinateData   = data2;
            hp2.RectangleBrush = RectangleBrushes.Horizontal.FaintGreenFade;
            hp2.Filled         = true;
            hp2.BaseOffset     = 0.15;
            hp2.BaseWidth      = 0.25f;

            plotSurface.Clear();

            plotSurface.Add(hp);
            plotSurface.Add(hp2);

            plotSurface.PlotBackBrush = RectangleBrushes.Vertical.FaintBlueFade;
            plotSurface.Refresh();
        }
Example #3
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            // obtain stock information from xml file
            DataSet ds = new DataSet();

            System.IO.Stream file =
                Assembly.GetExecutingAssembly().GetManifestResourceStream("DemoLib.Resources.asx_jbh.xml");
            ds.ReadXml(file, System.Data.XmlReadMode.ReadSchema);
            DataTable dt = ds.Tables[0];

            // create CandlePlot.
            CandlePlot cp = new CandlePlot();

            cp.DataSource   = dt;
            cp.AbscissaData = "Date";
            cp.OpenData     = "Open";
            cp.LowData      = "Low";
            cp.HighData     = "High";
            cp.CloseData    = "Close";
            cp.BearishColor = Color.Red;
            cp.BullishColor = Color.Green;
            cp.StickWidth   = 3;
            cp.Color        = Color.DarkBlue;

            plotSurface.Add(new Grid());
            plotSurface.Add(cp);

            plotSurface.Title        = "AU:JBH";
            plotSurface.XAxis1.Label = "Date / Time";
            plotSurface.YAxis1.Label = "Price [$]";

            plotSurface.Refresh();
        }
Example #4
0
            public override bool DoMouseMove(int X, int Y, Modifier keys, InteractivePlotSurface2D ps)
            {
                DateTime time = new DateTime((long)Chart.stockPricePlot.PhysicalXAxis1Cache.PhysicalToWorld(new System.Drawing.Point(X, Y), false));
                int      idx  = Chart.GetTimeIndex(time);

                if (idx >= 0)
                {
                    float price = (float)Chart.Source.Rows[idx]["Price"];
                    Chart.priceText.Text = String.Format("{0:c}", price);
                    using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(Lines.Canvas.Image))
                    {
                        PhysicalAxis xAxis = Chart.stockPricePlot.PhysicalXAxis1Cache;
                        PhysicalAxis yAxis = Chart.stockPricePlot.PhysicalYAxis1Cache;
                        g.Clear(System.Drawing.Color.Transparent);

                        // Draw the time line
                        System.Drawing.PointF timePoint = xAxis.WorldToPhysical(time.Ticks, true);
                        g.DrawLine(Lines.TimePen, timePoint.X, yAxis.PhysicalMin.Y, timePoint.X, yAxis.PhysicalMax.Y);

                        // Draw the guide lines
                        System.Drawing.PointF minPoint = yAxis.WorldToPhysical(price / GuideLinePercentage, true);
                        System.Drawing.PointF maxPoint = yAxis.WorldToPhysical(price * GuideLinePercentage, true);
                        g.DrawLine(Lines.PricePen, xAxis.PhysicalMin.X, minPoint.Y, xAxis.PhysicalMax.X, minPoint.Y);
                        g.DrawLine(Lines.PricePen, xAxis.PhysicalMin.X, maxPoint.Y, xAxis.PhysicalMax.X, maxPoint.Y);
                    }

                    // Use this as a hook to update the minimum and maximum displayed prices
                    Chart.UpdatePriceMinMax();

                    // Refresh the canvas to display the updated lines
                    Chart.stockPricePlot.Canvas.Refresh();
                }
                return(false);
            }
            /// <summary>
            /// Handles the mouse leave event
            /// </summary>
            /// <param name="ps">The plot surface</param>
            /// <returns>false</returns>
            public override bool DoMouseLeave(InteractivePlotSurface2D ps)
            {
                Hovering             = false;
                Lines.Canvas.Visible = false;

                // Could clear the text when the mouse leaves the chart
                return(false);
            }
Example #6
0
            /// <summary>
            /// Handles a move move event
            /// </summary>
            /// <param name="X">The X mouse coordinate</param>
            /// <param name="Y">The Y mouse coordinate</param>
            /// <param name="keys">The mouse buttons that are pressed</param>
            /// <param name="ps">The plot surface the mouse is moving over</param>
            /// <returns></returns>
            public override bool DoMouseMove(int X, int Y, Modifier keys, InteractivePlotSurface2D ps)
            {
                if ((Chart.Lines.Count == 0) || (Chart.Plot.PhysicalXAxis1Cache == null))
                {
                    return(false);
                }
                double mouseVal = Chart.Plot.PhysicalXAxis1Cache.PhysicalToWorld(new System.Drawing.Point(X, Y), false);

                // Set the text values based on the cursor position
                if (Chart.XAxis.Equals("Time"))
                {
                    if (!Chart.Lines[0].DataMutex.WaitOne(5000))
                    {
                        return(false);
                    }
                    int idx = Chart.GetDataIndex(mouseVal);
                    if (idx >= 0)
                    {
                        Chart.XAxisValue.Text = string.Format("{0:t} {0:MMM d} '{0:yy}", Chart.Lines[0].Data.Rows[idx][Chart.XAxis]);
                    }
                    Chart.Lines[0].DataMutex.ReleaseMutex();
                    for (int i = 0; i < Chart.Lines.Count; i++)
                    {
                        Chart.PlotLineLabels[i].Text = Chart.Lines[i].PrintValue(idx);
                    }
                }
                else
                {
                    Chart.XAxisValue.Text = mouseVal.ToString();
                    for (int i = 0; i < Chart.Lines.Count; i++)
                    {
                        if (Chart.Lines[i].Plot != null)
                        {
                            Chart.PlotLineLabels[i].Text = Chart.Lines[i].Plot.PlotYAxis.PhysicalToWorld(new System.Drawing.Point(X, Y),
                                                                                                         Chart.Plot.PhysicalYAxis1Cache.PhysicalMin,
                                                                                                         Chart.Plot.PhysicalYAxis1Cache.PhysicalMax, false).ToString();
                        }
                    }
                }

                // Draw the line on the chart to show the cursor position
                using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(Lines.Canvas.Image))
                {
                    PhysicalAxis xAxis = Chart.Plot.PhysicalXAxis1Cache;
                    PhysicalAxis yAxis = Chart.Plot.PhysicalYAxis1Cache;
                    g.Clear(System.Drawing.Color.Transparent);

                    // Draw the line
                    g.DrawLine(Lines.TimePen, X, yAxis.PhysicalMin.Y, X, yAxis.PhysicalMax.Y);
                    g.DrawLine(Lines.PricePen, xAxis.PhysicalMin.X, Y, xAxis.PhysicalMax.X, Y);
                }

                // Refresh the canvas to display the updated lines
                Chart.Plot.Canvas.Refresh();

                return(false);
            }
 /// <summary>
 /// Handles the mouse leave event
 /// </summary>
 /// <param name="ps">The plot surface</param>
 /// <returns>false</returns>
 public override bool DoMouseLeave(InteractivePlotSurface2D ps)
 {
     Hovering             = false;
     Lines.Canvas.Visible = false;
     if (Chart.Source != null)
     {
         Chart.UpdatePriceText((DateTime)Chart.Source.Rows[Chart.Source.Rows.Count - 1][TIME_DATA_TAG]);
     }
     return(false);
 }
Example #8
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear(); // clear everything. reset fonts. remove plot components etc.

            System.Random r    = new Random();
            double[]      a    = new double[100];
            double[]      b    = new double[100];
            double        mult = 0.00001f;

            for (int i = 0; i < 100; ++i)
            {
                a[i] = ((double)r.Next(1000) / 5000.0f - 0.1f) * mult;
                if (i == 50)
                {
                    b[i] = 1.0f * mult;
                }
                else
                {
                    b[i]  = (double)Math.Sin((((double)i - 50.0f) / 4.0f)) / (((double)i - 50.0f) / 4.0f);
                    b[i] *= mult;
                }
                a[i] += b[i];
            }

            Marker    m  = new Marker(Marker.MarkerType.Cross1, 6, new Pen(Color.Blue, 2.0F));
            PointPlot pp = new PointPlot(m);

            pp.OrdinateData = a;
            pp.AbscissaData = new StartStep(-500.0, 10.0);
            pp.Label        = "Random";
            plotSurface.Add(pp);

            LinePlot lp = new LinePlot();

            lp.OrdinateData = b;
            lp.AbscissaData = new StartStep(-500.0, 10.0);
            lp.Pen          = new Pen(Color.Red, 2.0f);
            plotSurface.Add(lp);

            plotSurface.Title        = "Sinc Function";
            plotSurface.YAxis1.Label = "Magnitude";
            plotSurface.XAxis1.Label = "Position";

            Legend legend = new Legend();

            legend.AttachTo(PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Left);
            legend.VerticalEdgePlacement   = Legend.Placement.Inside;
            legend.HorizontalEdgePlacement = Legend.Placement.Inside;
            legend.YOffset = 8;

            plotSurface.Legend       = legend;
            plotSurface.LegendZOrder = 1; // default zorder for adding idrawables is 0, so this puts legend on top.

            plotSurface.Refresh();
        }
Example #9
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            // this example will in the future demonstrate histogram plots with +- values.
            // currently not used - histograms don't support this.
            plotSurface.Clear();

            int[]         values = { -10, 2, -3, 4, 6, -1, 10, 4, -4, -3 };
            HistogramPlot hp     = new HistogramPlot();

            hp.OrdinateData = values;
            plotSurface.Add(hp);

            plotSurface.Refresh();
        }
Example #10
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            // Create a new line plot from array data via the ArrayAdapter class.
            LinePlot lp = new LinePlot();

            lp.DataSource = makeDaub(256);
            lp.Color      = Color.Green;
            lp.Label      = "Daubechies Wavelet"; // no legend, but still useful for copy data to clipboard.

            Grid myGrid = new Grid();

            myGrid.VerticalGridType   = Grid.GridType.Fine;
            myGrid.HorizontalGridType = Grid.GridType.Coarse;
            plotSurface.Add(myGrid);

            // And add it to the plot surface
            plotSurface.Add(lp);
            plotSurface.Title = "Reversed / Upside down Daubechies Wavelet";

            // Ok, the above will produce a decent default plot, but we would like to change
            // some of the Y Axis details. First, we'd like lots of small ticks (10) between
            // large tick values. Secondly, we'd like to draw a grid for the Y values. To do
            // this, we create a new LinearAxis (we could also use Label, Log etc). Rather than
            // starting from scratch, we use the constructor that takes an existing axis and
            // clones it (values in the superclass Axis only are cloned). PlotSurface2D
            // automatically determines a suitable axis when we add plots to it (merging
            // current requirements with old requirements), and we use this as our starting
            // point. Because we didn't specify which Y Axis we are using when we added the
            // above line plot (there is one on the left - YAxis1 and one on the right - YAxis2)
            // PlotSurface2D.Add assumed we were using YAxis1. So, we create a new axis based on
            // YAxis1, update the details we want, then set the YAxis1 to be our updated one.
            LinearAxis myAxis = new LinearAxis(plotSurface.YAxis1);

            myAxis.NumberOfSmallTicks = 2;
            plotSurface.YAxis1        = myAxis;

            // We would also like to modify the way in which the X Axis is printed. This time,
            // we'll just modify the relevant PlotSurface2D Axis directly.
            plotSurface.XAxis1.WorldMax = 100.0f;

            plotSurface.PlotBackColor   = Color.OldLace;
            plotSurface.XAxis1.Reversed = true;
            plotSurface.YAxis1.Reversed = true;

            // Force a re-draw of the control.
            plotSurface.Refresh();
        }
Example #11
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();
            const int size = 200;

            float [] xs = new float [size];
            float [] ys = new float [size];
            for (int i = 0; i < size; i++)
            {
                xs[i] = (float)Math.Sin((double)i / (double)(size - 1) * 2.0 * Math.PI);
                ys[i] = (float)Math.Cos((double)i / (double)(size - 1) * 6.0 * Math.PI);
            }

            LinePlot lp = new LinePlot();

            lp.OrdinateData = ys;
            lp.AbscissaData = xs;
            Pen linePen = new Pen(Color.Yellow, 5.0f);

            lp.Pen = linePen;
            plotSurface.Add(lp);
            plotSurface.Title = "AxisConstraint.EqualScaling in action...";

            // Image downloaded from http://squidfingers.com. Thanks!
            Assembly a = Assembly.GetExecutingAssembly();

            System.IO.Stream file =
                a.GetManifestResourceStream("DemoLib.Resources.pattern01.jpg");
            System.Drawing.Image im = Image.FromStream(file);
            plotSurface.PlotBackImage = new Bitmap(im);

            plotSurface.AddAxesConstraint(new AxesConstraint.AspectRatio(1.0, PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Left));
            plotSurface.XAxis1.WorldMin = plotSurface.YAxis1.WorldMin;
            plotSurface.XAxis1.WorldMax = plotSurface.YAxis1.WorldMax;
            plotSurface.SmoothingMode   = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            plotSurface.AddInteraction(new PlotZoom());

            // make sure plot surface colors are as we expect - the wave example changes them.
            //plotSurface.PlotBackColor = Color.White;
            plotSurface.XAxis1.Color = Color.Black;
            plotSurface.YAxis1.Color = Color.Black;

            plotSurface.Refresh();
        }
Example #12
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            System.Random r = new Random();

            int len = 35;

            double[] a = new double[len];
            double[] b = new double[len];

            for (int i = 0; i < len; ++i)
            {
                int j = len - 1 - i;
                a[i] = (double)Math.Exp(-(double)(i - len / 2) * (double)(i - len / 2) / 50.0f);
                b[i] = a[i] + (r.Next(10) / 50.0f) - 0.05f;
                if (b[i] < 0.0f)
                {
                    b[i] = 0;
                }
            }

            HistogramPlot sp = new HistogramPlot();

            sp.DataSource     = b;
            sp.Pen            = Pens.DarkBlue;
            sp.Filled         = true;
            sp.RectangleBrush = new RectangleBrushes.HorizontalCenterFade(Color.Lavender, Color.Gold);
            sp.BaseWidth      = 0.5f;
            sp.Label          = "Random Data";
            LinePlot lp = new LinePlot();

            lp.DataSource = a;
            lp.Pen        = new Pen(Color.Blue, 3.0f);
            lp.Label      = "Gaussian Function";
            plotSurface.Add(sp);
            plotSurface.Add(lp);
            plotSurface.Legend          = new Legend();
            plotSurface.YAxis1.WorldMin = 0.0f;
            plotSurface.Title           = "Histogram Plot";
            plotSurface.Refresh();
        }
Example #13
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            FilledRegion fr = new FilledRegion(
                new VerticalLine(1.2),
                new VerticalLine(2.4));

            fr.Brush = Brushes.BlanchedAlmond;
            plotSurface.Add(fr);

            // note that arrays can be of any type you like.
            int[]          opens  = { 1, 2, 1, 2, 1, 3 };
            double[]       closes = { 2, 2, 2, 1, 2, 1 };
            float[]        lows   = { 0, 1, 1, 1, 0, 0 };
            System.Int64[] highs  = { 3, 2, 3, 3, 3, 4 };
            int[]          times  = { 0, 1, 2, 3, 4, 5 };

            CandlePlot cp = new CandlePlot();

            cp.CloseData    = closes;
            cp.OpenData     = opens;
            cp.LowData      = lows;
            cp.HighData     = highs;
            cp.AbscissaData = times;
            plotSurface.Add(cp);

            HorizontalLine line = new HorizontalLine(1.2);

            line.LengthScale = 0.89f;
            plotSurface.Add(line, -10);

            VerticalLine line2 = new VerticalLine(1.2);

            line2.LengthScale = 0.89f;
            plotSurface.Add(line2);

            plotSurface.AddInteraction(new PlotZoom());

            plotSurface.Title = "Line in the Title Number 1\nFollowed by another title line\n and another";
            plotSurface.Refresh();
        }
Example #14
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            //FileStream fs = new FileStream( @"c:\light.wav", System.IO.FileMode.Open );
            System.IO.Stream file =
                Assembly.GetExecutingAssembly().GetManifestResourceStream("DemoLib.Resources.light.wav");


            System.Int16[] w = new short[5000];
            byte[]         a = new byte[10000];
            file.Read(a, 0, 10000);
            for (int i = 100; i < 5000; ++i)
            {
                w[i] = BitConverter.ToInt16(a, i * 2);
            }

            file.Close();

            plotSurface.Clear();
            plotSurface.AddInteraction(new VerticalGuideline(Color.Gray));
            plotSurface.AddInteraction(new HorizontalGuideline(Color.Gray));
            plotSurface.AddInteraction(new PlotDrag(true, true));
            plotSurface.AddInteraction(new AxisDrag());

            plotSurface.Add(new HorizontalLine(0.0, Color.LightBlue));

            StepPlot sp = new StepPlot();

            sp.DataSource = w;
            sp.Color      = Color.Yellow;
            sp.Center     = true;
            plotSurface.Add(sp);

            plotSurface.YAxis1.FlipTicksLabel = true;

            plotSurface.OuterBackColor = Color.Black;
            plotSurface.PlotBackColor  = Color.DarkBlue;
            plotSurface.XAxis1.Color   = Color.White;
            plotSurface.YAxis1.Color   = Color.White;

            plotSurface.Refresh();
        }
Example #15
0
        /// <summary>
        /// Initializes a new instance of the NPlotDemo.PlotSurface2DDemo class.
        /// </summary>
        public PlotSurface2DDemo()
            : base("NPlot Gtk.InteractivePlotSurface2D Demo")
        {
            // Initialise Gtk# form
            InitializeComponent();

            // Define array of PlotSamples classes
            sampleTypes = new Type[]
            {
                typeof(PlotWave),
                typeof(PlotDataSet),
                typeof(PlotMockup),
                typeof(PlotImage),
                typeof(PlotQE),
                typeof(PlotMarkers),
                typeof(PlotLogAxis),
                typeof(PlotLogLog),
                typeof(PlotParticles),
                typeof(PlotWavelet),
                typeof(PlotSincFunction),
                typeof(PlotGaussian),
                typeof(PlotLabelAxis),
                typeof(PlotCircular),
                typeof(PlotCandle),
                typeof(PlotABC)
            };

            plotSurface = new InteractivePlotSurface2D();
            plotWidget.InteractivePlotSurface2D = plotSurface;

            // set up printer
            printDocument            = new PrintDocument();
            printDocument.PrintPage += new PrintPageEventHandler(pd_PrintPage);

            // draw the first plot sample
            currentPlot = 0;

            ShowSample(currentPlot);
        }
Example #16
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        public PlotControl()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            // double buffer, and update when resize.
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.UserPaint, true);
            this.ResizeRedraw = true;

            this.Surface = null;

            // Map control events to generic events
            this.MouseEnter += new EventHandler(WinFormsPlotSurface2D_MouseEnter);
            this.MouseLeave += new EventHandler(WinFormsPlotSurface2D_MouseLeave);
            this.MouseDown  += new MouseEventHandler(WinFormsPlotSurface2D_MouseDown);
            this.MouseMove  += new MouseEventHandler(WinFormsPlotSurface2D_MouseMove);
            this.MouseUp    += new MouseEventHandler(WinFormsPlotSurface2D_MouseUp);
            this.MouseWheel += new MouseEventHandler(WinFormsPlotSurface2D_MouseWheel);
            this.KeyDown    += new KeyEventHandler(WinFormsPlotSurface2D_KeyDown);
            this.KeyUp      += new KeyEventHandler(WinFormsPlotSurface2D_KeyUp);
        }
Example #17
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();
            plotSurface.Add(new HorizontalLine(0.0, Color.LightGray));
            plotSurface.Add(new VerticalLine(0.0, Color.LightGray));

            const int    N     = 400;
            const double start = -Math.PI * 7.0;
            const double end   = Math.PI * 7.0;

            double[] xs = new double[N];
            double[] ys = new double[N];

            for (int i = 0; i < N; ++i)
            {
                double t = ((double)i * (end - start) / (double)N + start);
                xs[i] = 0.5 * (t - 2.0 * Math.Sin(t));
                ys[i] = 2.0 * (1.0 - 2.0 * Math.Cos(t));
            }

            LinePlot lp = new LinePlot(ys, xs);

            lp.Pen   = new Pen(Color.DarkBlue, 2.0f);
            lp.Label = "Circular Line"; // no legend, but still useful for copy data to clipboard.
            plotSurface.Add(lp);

            plotSurface.XAxis1 = new PiAxis(plotSurface.XAxis1);

            plotSurface.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            plotSurface.Legend = new Legend();
            plotSurface.Legend.AttachTo(PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Right);
            plotSurface.Legend.HorizontalEdgePlacement = Legend.Placement.Inside;
            plotSurface.Legend.VerticalEdgePlacement   = Legend.Placement.Inside;
            plotSurface.Legend.XOffset = -10;
            plotSurface.Legend.YOffset = -10;

            plotSurface.Refresh();
        }
Example #18
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            double[] y = new double[1] {
                1.0f
            };
            foreach (object i in Enum.GetValues(typeof(Marker.MarkerType)))
            {
                Marker   m = new Marker((Marker.MarkerType)Enum.Parse(typeof(Marker.MarkerType), i.ToString()), 8);
                double[] x = new double[1];
                x[0] = (double)m.Type;
                PointPlot pp = new PointPlot();
                pp.OrdinateData = y;
                pp.AbscissaData = x;
                pp.Marker       = m;
                pp.Label        = m.Type.ToString();
                plotSurface.Add(pp);
            }
            plotSurface.Title            = "Markers";
            plotSurface.YAxis1.Label     = "Index";
            plotSurface.XAxis1.Label     = "Marker";
            plotSurface.YAxis1.WorldMin  = 0.0f;
            plotSurface.YAxis1.WorldMax  = 2.0f;
            plotSurface.XAxis1.WorldMin -= 1.0f;
            plotSurface.XAxis1.WorldMax += 1.0f;

            Legend legend = new Legend();

            legend.AttachTo(PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Right);
            legend.VerticalEdgePlacement   = Legend.Placement.Outside;
            legend.HorizontalEdgePlacement = Legend.Placement.Inside;
            legend.XOffset     = 5; // note that these numbers can be negative.
            legend.YOffset     = 0;
            plotSurface.Legend = legend;

            plotSurface.Refresh();
        }
 public InteractiveFigureForm()
 {
     InitializeComponent();
     this.PlotSurface = new InteractivePlotSurface2D();
     plotSurface.InteractivePlotSurface2D = this.PlotSurface;
 }
Example #20
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();
            //plotSurface.DateTimeToolTip = true;

            // obtain stock information from xml file
            DataSet ds = new DataSet();

            System.IO.Stream file =
                Assembly.GetExecutingAssembly().GetManifestResourceStream("DemoLib.Resources.asx_jbh.xml");
            ds.ReadXml(file, System.Data.XmlReadMode.ReadSchema);
            DataTable dt = ds.Tables[0];
            DataView  dv = new DataView(dt);

            // create CandlePlot.
            CandlePlot cp = new CandlePlot();

            cp.DataSource   = dt;
            cp.AbscissaData = "Date";
            cp.OpenData     = "Open";
            cp.LowData      = "Low";
            cp.HighData     = "High";
            cp.CloseData    = "Close";
            cp.BearishColor = Color.Red;
            cp.BullishColor = Color.Green;
            cp.Style        = CandlePlot.Styles.Filled;

            // calculate 10 day moving average and 2*sd line
            ArrayList av10    = new ArrayList();
            ArrayList sd2_10  = new ArrayList();
            ArrayList sd_2_10 = new ArrayList();
            ArrayList dates   = new ArrayList();

            for (int i = 0; i < dt.Rows.Count - 10; ++i)
            {
                float sum = 0.0f;
                for (int j = 0; j < 10; ++j)
                {
                    sum += (float)dt.Rows[i + j]["Close"];
                }
                float average = sum / 10.0f;
                av10.Add(average);
                sum = 0.0f;
                for (int j = 0; j < 10; ++j)
                {
                    sum += ((float)dt.Rows[i + j]["Close"] - average) * ((float)dt.Rows[i + j]["Close"] - average);
                }
                sum /= 10.0f;
                sum  = 2.0f * (float)Math.Sqrt(sum);
                sd2_10.Add(average + sum);
                sd_2_10.Add(average - sum);
                dates.Add((DateTime)dt.Rows[i + 10]["Date"]);
            }

            // and a line plot of close values.
            LinePlot av = new LinePlot();

            av.OrdinateData = av10;
            av.AbscissaData = dates;
            av.Color        = Color.LightGray;
            av.Pen.Width    = 2.0f;

            LinePlot top = new LinePlot();

            top.OrdinateData = sd2_10;
            top.AbscissaData = dates;
            top.Color        = Color.LightSteelBlue;
            top.Pen.Width    = 2.0f;

            LinePlot bottom = new LinePlot();

            bottom.OrdinateData = sd_2_10;
            bottom.AbscissaData = dates;
            bottom.Color        = Color.LightSteelBlue;
            bottom.Pen.Width    = 2.0f;

            FilledRegion fr = new FilledRegion(top, bottom);

            //fr.RectangleBrush = new RectangleBrushes.Vertical( Color.FloralWhite, Color.GhostWhite );
            fr.RectangleBrush         = new RectangleBrushes.Vertical(Color.FromArgb(255, 255, 240), Color.FromArgb(240, 255, 255));
            plotSurface.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            plotSurface.Add(fr);

            plotSurface.Add(new Grid());

            plotSurface.Add(av);
            plotSurface.Add(top);
            plotSurface.Add(bottom);
            plotSurface.Add(cp);

            // now make an arrow...
            ArrowItem arrow = new ArrowItem(new PointD(((DateTime)dt.Rows[60]["Date"]).Ticks, 2.28), -80, "An interesting flat bit");

            arrow.ArrowColor     = Color.DarkBlue;
            arrow.PhysicalLength = 50;

            //plotSurface.Add( arrow );

            plotSurface.Title            = "AU:JBH";
            plotSurface.XAxis1.Label     = "Date / Time";
            plotSurface.XAxis1.WorldMin += plotSurface.XAxis1.WorldLength / 4.0;
            plotSurface.XAxis1.WorldMax -= plotSurface.XAxis1.WorldLength / 2.0;
            plotSurface.YAxis1.Label     = "Price [$]";

            plotSurface.XAxis1 = new TradingDateTimeAxis(plotSurface.XAxis1);

            plotSurface.AddInteraction(new PlotDrag(true, true));
            plotSurface.AddInteraction(new AxisDrag());


            // make sure plot surface colors are as we expect - the wave example changes them.
            plotSurface.PlotBackColor = Color.White;
            plotSurface.XAxis1.Color  = Color.Black;
            plotSurface.YAxis1.Color  = Color.Black;

            plotSurface.Refresh();
        }
Example #21
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            // first of all, generate some mockup data.
            DataTable info = new DataTable("Store Information");

            info.Columns.Add("Index", typeof(int));
            info.Columns.Add("IndexOffsetLeft", typeof(float));
            info.Columns.Add("IndexOffsetRight", typeof(float));
            info.Columns.Add("StoreName", typeof(string));
            info.Columns.Add("BarBase", typeof(float));
            info.Columns.Add("StoreGrowth", typeof(float));
            info.Columns.Add("AverageGrowth", typeof(float));
            info.Columns.Add("ProjectedSales", typeof(float));

            float  barBase = 185.0f;
            Random r       = new Random();

            for (int i = 0; i < 18; ++i)
            {
                DataRow row = info.NewRow();
                row["Index"]            = i;
                row["IndexOffsetLeft"]  = (float)i - 0.1f;
                row["IndexOffsetRight"] = (float)i + 0.1f;
                row["StoreName"]        = "Store " + (i + 1).ToString();
                row["BarBase"]          = barBase;
                row["StoreGrowth"]      = barBase + ((r.NextDouble() - 0.1) * 20.0f);
                row["AverageGrowth"]    = barBase + ((r.NextDouble() - 0.1) * 15.0f);
                row["ProjectedSales"]   = barBase + (r.NextDouble() * 15.0f);
                info.Rows.Add(row);
                barBase += (float)r.NextDouble() * 4.0f;
            }


            plotSurface.Clear();

            plotSurface.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            // generate the grid
            Grid grid = new Grid();

            grid.VerticalGridType   = Grid.GridType.Coarse;
            grid.HorizontalGridType = Grid.GridType.None;
            grid.MajorGridPen       = new Pen(Color.Black, 1.0f);
            plotSurface.Add(grid);

            // generate the trendline
            LinePlot trendline = new LinePlot();

            trendline.DataSource   = info;
            trendline.AbscissaData = "Index";
            trendline.OrdinateData = "BarBase";
            trendline.Pen          = new Pen(Color.Black, 3.0f);
            trendline.Label        = "Trendline";
            plotSurface.Add(trendline);

            // draw store growth bars
            BarPlot storeGrowth = new BarPlot();

            storeGrowth.DataSource         = info;
            storeGrowth.AbscissaData       = "IndexOffsetLeft";
            storeGrowth.OrdinateDataTop    = "StoreGrowth";
            storeGrowth.OrdinateDataBottom = "BarBase";
            storeGrowth.Label     = "Store Growth";
            storeGrowth.FillBrush = Florence.RectangleBrushes.Solid.Black;
            //storeGrowth.BorderPen = new Pen( Color.Black, 2.0f );
            plotSurface.Add(storeGrowth);

            // draw average growth bars
            BarPlot averageGrowth = new BarPlot();

            averageGrowth.DataSource         = info;
            averageGrowth.AbscissaData       = "IndexOffsetRight";
            averageGrowth.OrdinateDataBottom = "BarBase";
            averageGrowth.OrdinateDataTop    = "AverageGrowth";
            averageGrowth.Label     = "Average Growth";
            averageGrowth.FillBrush = Florence.RectangleBrushes.Solid.Gray;
            //averageGrowth.BorderPen = new Pen( Color.Black, 2.0f );
            plotSurface.Add(averageGrowth);

            // generate the projected sales step line.
            StepPlot projected = new StepPlot();

            projected.DataSource           = info;
            projected.AbscissaData         = "Index";
            projected.OrdinateData         = "ProjectedSales";
            projected.Pen                  = new Pen(Color.Orange, 3.0f);
            projected.HideVerticalSegments = true;
            projected.Center               = true;
            projected.Label                = "Projected Sales";
            projected.WidthScale           = 0.7f;
            plotSurface.Add(projected);

            // generate the minimum target line.
            HorizontalLine minimumTargetLine = new HorizontalLine(218, new Pen(Color.Green, 3.5f));

            minimumTargetLine.Label        = "Minimum Target";
            minimumTargetLine.LengthScale  = 0.98f;
            minimumTargetLine.ShowInLegend = true; // off by default for lines.
            plotSurface.Add(minimumTargetLine);

            // generate the preferred target line.
            HorizontalLine preferredTargetLine = new HorizontalLine(228, new Pen(Color.Blue, 3.5f));

            preferredTargetLine.Label        = "Preferred Target";
            preferredTargetLine.LengthScale  = 0.98f;
            preferredTargetLine.ShowInLegend = true; // off by default for lines.
            plotSurface.Add(preferredTargetLine);

            // make some modifications so that chart matches requirements.
            // y axis.
            plotSurface.YAxis1.TicksIndependentOfPhysicalExtent = true;
            plotSurface.YAxis1.TickTextNextToAxis               = false;
            plotSurface.YAxis1.TicksAngle                       = 3.0f * (float)Math.PI / 2.0f;
            ((LinearAxis)plotSurface.YAxis1).LargeTickStep      = 10.0;
            ((LinearAxis)plotSurface.YAxis1).NumberOfSmallTicks = 0;

            // x axis
            plotSurface.XAxis1.TicksIndependentOfPhysicalExtent = true;
            plotSurface.XAxis1.TickTextNextToAxis = false;
            plotSurface.XAxis1.TicksAngle         = (float)Math.PI / 2.0f;
            LabelAxis la = new LabelAxis(plotSurface.XAxis1);

            for (int i = 0; i < info.Rows.Count; ++i)
            {
                la.AddLabel((string)info.Rows[i]["StoreName"], Convert.ToInt32(info.Rows[i]["Index"]));
            }
            la.TicksLabelAngle  = (float)90.0f;
            la.TicksBetweenText = true;
            plotSurface.XAxis1  = la;

            plotSurface.XAxis2 = (Axis)plotSurface.XAxis1.Clone();
            plotSurface.XAxis2.HideTickText  = true;
            plotSurface.XAxis2.LargeTickSize = 0;

            Legend l = new Legend();

            l.NumberItemsVertically = 2;
            l.AttachTo(Florence.PlotSurface2D.XAxisPosition.Bottom, Florence.PlotSurface2D.YAxisPosition.Left);
            l.HorizontalEdgePlacement = Florence.Legend.Placement.Outside;
            l.VerticalEdgePlacement   = Florence.Legend.Placement.Inside;
            l.XOffset     = 5;
            l.YOffset     = 50;
            l.BorderStyle = Florence.LegendBase.BorderType.Line;

            plotSurface.Legend = l;

            plotSurface.Title =
                "Sales Growth Compared to\n" +
                "Average Sales Growth by Store Size - Rank Order Low to High";

            plotSurface.Refresh();
        }
Example #22
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            // can plot different types.
            ArrayList l = new ArrayList();

            l.Add((int)2);
            l.Add((double)1.0);
            l.Add((float)3.0);
            l.Add((int)5.0);

            LinePlot lp1 = new LinePlot(new double[] { 4.0, 3.0, 5.0, 8.0 });

            lp1.Pen       = new Pen(Color.LightBlue);
            lp1.Pen.Width = 2.0f;

            //lp.AbscissaData = new StartStep( 0.0, 2.0 );

            LinePlot lp2 = new LinePlot(new double[] { 2.0, 1.0, 4.0, 5.0 });

            lp2.Pen       = new Pen(Color.LightBlue);
            lp2.Pen.Width = 2.0f;

            FilledRegion fr = new FilledRegion(lp1, lp2);

            plotSurface.Add(fr);

            plotSurface.Add(new Grid());
            plotSurface.Add(lp1);
            plotSurface.Add(lp2);

            ArrowItem a = new ArrowItem(new PointD(2, 4), -50.0f, "Arrow");

            a.HeadOffset = 5;
            a.ArrowColor = Color.Red;
            a.TextColor  = Color.Purple;
            plotSurface.Add(a);

            MarkerItem m = new MarkerItem(new Marker(Marker.MarkerType.TriangleDown, 8, Color.ForestGreen), 1.38, 2.9);

            plotSurface.Add(m);

            plotSurface.XAxis1.TicksCrossAxis = true;

            ((LinearAxis)plotSurface.XAxis1).LargeTickValue = -4.1;
            ((LinearAxis)plotSurface.XAxis1).AutoScaleText  = true;
            ((LinearAxis)plotSurface.XAxis1).TicksIndependentOfPhysicalExtent = true;
            //plotSurface.XAxis1.Label = "Hello world";

            plotSurface.Refresh();

            /*
             * plotSurface.AutoScaleTitle = false;
             * plotSurface.AutoScaleAutoGeneratedAxes = true;
             *
             * plotSurface.Title = "My Title";
             *
             * double[] a = { 0, 2, 1, 4, double.NaN, double.NaN, 5, 8, 7, 9 };
             * LinePlot lp = new LinePlot();
             * lp.DataSource = a;
             * lp.Label = "My Label";
             *
             * plotSurface.Add( lp );
             *
             * plotSurface.Legend = new Legend();
             * plotSurface.Legend.AutoScaleText = false;
             * plotSurface.Legend.NeverShiftAxes = true;
             * plotSurface.Legend.HorizontalEdgePlacement = Legend.Placement.Inside;
             * plotSurface.Legend.VerticalEdgePlacement = Legend.Placement.Inside;
             * plotSurface.Legend.XOffset = -10;
             * plotSurface.Legend.YOffset = 10;
             * //plotSurface.AddAxesConstraint( new AxesConstraint.EqualSpacing() );
             *
             * ((LinearAxis)plotSurface.XAxis1).Offset = 10.0;
             * ((LinearAxis)plotSurface.XAxis1).Scale = 27.0;
             * //((LinearAxis)plotSurface.XAxis1).TicksIndependentOfPhysicalExtent = true;
             * //((LinearAxis)plotSurface.YAxis1).TicksIndependentOfPhysicalExtent = true;
             *
             * AxesConstraint.AxisPosition c1 =
             *  new Florence.AxesConstraint.AxisPosition( PlotSurface2D.YAxisPosition.Left, 100.0f );
             *
             * AxesConstraint.AspectRatio c2 =
             *  new AxesConstraint.AspectRatio( 5.0f, PlotSurface2D.YAxisPosition.Left );
             *
             * plotSurface.AddAxesConstraint( c1 );
             * plotSurface.AddAxesConstraint( c2 );
             *
             * plotSurface.Refresh();
             */
        }
            /// <summary>
            /// Handles a mouse scroll wheel event
            /// </summary>
            /// <param name="X">The X coordinate of the mouse</param>
            /// <param name="Y">The Y coordinate of the mouse</param>
            /// <param name="direction">The mouse wheel movement</param>
            /// <param name="keys">The mouse buttons that are pressed</param>
            /// <param name="ps">The plot surface the mouse is scrolling over</param>
            /// <returns></returns>
            public override bool DoMouseScroll(int X, int Y, int direction, Modifier keys, InteractivePlotSurface2D ps)
            {
                if (Hovering && (Chart.Lines.Count > 0))
                {
                    double percentChange = ((direction > 0) ? (1 / 1.2) : (1.2));
                    bool   isXAxis       = !keys.HasFlag(Modifier.Control);
                    var    physAxis      = (isXAxis ? Chart.Plot.PhysicalXAxis1Cache : Chart.Plot.PhysicalYAxis1Cache);
                    double anchor        = physAxis.PhysicalToWorld(new System.Drawing.Point(X, Y), false);

                    if (isXAxis)
                    {
                        double ratio = ((double)X / physAxis.PhysicalLength);
                        if ((direction < 0) && (Chart.Plot.XAxis1.WorldMax > NPlot.Utils.ToDouble(Chart.Lines[0].Data.Rows[Chart.Lines[0].Data.Rows.Count - 1][Chart.XAxis])))
                        {
                            ratio = 1.0;
                        }
                        Chart.Plot.XAxis1.IncreaseRange(percentChange - 1.0, ratio);

                        Chart.UpdateMinMax();
                    }
                    else
                    {
                        double ratio = 1.0 - ((double)Y / physAxis.PhysicalLength);
                        for (int i = 0; i < Chart.Lines.Count; i++)
                        {
                            Chart.Lines[i].Plot.PlotYAxis.IncreaseRange(percentChange - 1.0, ratio);
                        }
                    }
                    Chart.Plot.Refresh();
                }

                return(false);
            }
Example #24
0
            /// <summary>
            /// Handles a move move event
            /// </summary>
            /// <param name="X">The X mouse coordinate</param>
            /// <param name="Y">The Y mouse coordinate</param>
            /// <param name="keys">The mouse buttons that are pressed</param>
            /// <param name="ps">The plot surface the mouse is moving over</param>
            /// <returns></returns>
            public override bool DoMouseMove(int X, int Y, Modifier keys, InteractivePlotSurface2D ps)
            {
                UpdateCursor(X, Y);

                return(false);
            }
Example #25
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            string myfile =
                "-1.251382E-3 -1.279191E-3 -7.230207E-4 -8.064462E-4 -5.005528E-4 -5.839783E-4 -1.696318E-3 -1.668509E-3 -3.893189E-4 -4.449358E-4 -1.473850E-3 -1.473850E-3 -1.974403E-3 -1.946594E-3 -2.085637E-3 -2.085637E-3 -1.612892E-3 -1.640701E-3 -1.863169E-3 " +
                "-1.251382E-3 -1.306999E-3 -6.674037E-4 -8.620631E-4 -4.449358E-4 -6.674037E-4 -1.668509E-4 -1.668509E-3 -3.615103E-4 -5.005528E-4 -5.561698E-5 -1.473850E-3 -4.449358E-4 -1.946594E-3 -6.395953E-4 -2.057828E-3 -1.585084E-3 -1.696318E-3 -1.807552E-3 " +
                "-1.223573E-3 -1.306999E-3 -6.117867E-4 -9.176802E-4 -3.893189E-4 -7.508292E-4 -1.390424E-4 -1.640701E-3 -3.615103E-4 -5.561698E-4 -5.561698E-5 -1.446041E-3 -4.449358E-4 -1.918786E-3 -6.117867E-4 -2.057828E-3 -1.585084E-3 -1.724126E-3 -1.779743E-3 " +
                "-1.251382E-3 -1.334807E-3 -5.839783E-4 -9.732971E-4 -3.615103E-4 -8.342547E-4 -1.390424E-4 3.893189E-4 1.751935E-3 2.919891E-3 3.476061E-3 3.031125E-3 1.807552E-3 6.674037E-4 -6.117867E-4 -2.030020E-3 -1.585084E-3 -1.779743E-3 -1.779743E-3 " +
                "-1.279191E-3 -1.362616E-3 -5.561698E-4 -1.028914E-3 -3.615103E-4 8.620631E-4 2.335913E-3 3.114551E-3 4.087848E-3 5.227996E-3 6.395952E-3 5.700740E-3 4.560592E-3 2.502764E-3 1.362616E-3 -6.117867E-4 -1.585084E-3 -1.807552E-3 -1.751935E-3 " +
                "-1.306999E-3 -1.390424E-3 -5.561698E-4 -1.056723E-3 1.890977E-3 4.087848E-3 6.117868E-3 9.621738E-3 1.357054E-2 1.721345E-2 1.715784E-2 1.462726E-2 1.059503E-2 6.368144E-3 3.253593E-3 1.279191E-3 6.674037E-4 -1.807552E-3 -1.779743E-3 " +
                "-1.390424E-3 -1.390424E-3 -5.561698E-4 1.585084E-3 4.560592E-3 8.481589E-3 1.437699E-2 2.155158E-2 2.702985E-2 3.078400E-2 3.134017E-2 2.892083E-2 2.338694E-2 1.446041E-2 6.757463E-3 3.031125E-3 6.674037E-4 -1.807552E-3 -1.807552E-3 " +
                "-1.446041E-3 -1.362616E-3 1.140148E-3 3.448253E-3 7.647335E-3 1.512782E-2 2.360941E-2 3.125674E-2 3.520555E-2 3.673501E-2 3.692967E-2 3.598418E-2 3.345361E-2 2.466613E-2 1.415452E-2 5.700740E-3 3.114551E-3 8.342547E-5 -1.835360E-3 " +
                "-1.529467E-3 -1.334807E-3 1.112340E-3 5.367038E-3 1.154052E-2 2.080075E-2 3.011659E-2 3.581733E-2 3.751365E-2 3.676282E-2 3.687406E-2 3.776393E-2 3.598418E-2 3.139579E-2 1.999430E-2 9.315844E-3 3.142359E-3 1.112340E-4 -1.863169E-3 " +
                "-1.640701E-3 -1.306999E-3 1.084531E-3 6.785271E-3 1.557275E-2 2.410996E-2 3.311991E-2 3.584514E-2 3.748584E-2 3.681844E-2 3.681844E-2 3.776393E-2 3.592857E-2 3.350923E-2 2.177405E-2 1.140148E-2 3.114551E-3 1.112340E-4 -1.890977E-3 " +
                "-1.696318E-3 -1.251382E-3 1.056723E-3 6.813080E-3 1.557275E-2 2.413777E-2 3.311991E-2 3.756927E-2 3.745804E-2 3.687406E-2 3.676282E-2 3.776393E-2 3.590076E-2 3.350923E-2 2.174624E-2 1.142929E-2 3.114551E-3 1.390424E-4 -1.918786E-3 " +
                "-1.779743E-3 -1.195765E-3 1.028914E-3 6.785271E-3 1.256944E-2 2.180186E-2 3.039468E-2 3.598418E-2 3.743023E-2 3.695748E-2 3.673501E-2 3.773612E-2 3.587295E-2 2.967166E-2 1.874292E-2 9.593928E-3 3.086742E-3 1.668509E-4 -1.918786E-3 " +
                "-1.863169E-3 -1.140148E-3 -1.362616E-3 3.058934E-3 7.285824E-3 1.532248E-2 2.472175E-2 3.195195E-2 3.478842E-2 3.701310E-2 3.670720E-2 3.545582E-2 3.220223E-2 2.333132E-2 1.354273E-2 5.978825E-3 1.279191E-3 1.668509E-4 -1.918786E-3 " +
                "-1.918786E-3 -1.084531E-3 -1.390424E-3 6.674037E-4 3.448253E-3 7.563909E-3 1.596207E-2 2.394311E-2 2.875398E-2 3.103427E-2 3.181291E-2 2.972727E-2 2.363721E-2 1.543371E-2 9.176801E-3 5.978825E-3 1.251382E-3 1.668509E-4 -1.890977E-3 " +
                "-1.974403E-3 -1.056723E-3 -1.390424E-3 6.674037E-4 1.362616E-3 3.781955E-3 8.036654E-3 1.304218E-2 1.824237E-2 2.127349E-2 2.174624E-2 1.963279E-2 1.573960E-2 1.148491E-2 7.341441E-3 3.197976E-3 -1.446041E-3 -1.557275E-3 -1.835360E-3 " +
                "-2.030020E-3 -1.056723E-3 -1.334807E-3 -1.084531E-3 -1.279191E-3 1.001106E-3 3.948805E-3 6.674037E-3 9.983247E-3 1.243039E-2 1.426576E-2 1.454384E-2 1.184642E-2 8.787482E-3 4.504975E-3 6.952122E-4 -1.418233E-3 -1.557275E-3 -1.779743E-3 " +
                "-2.057828E-3 -1.056723E-3 -1.306999E-3 -1.084531E-3 -1.251382E-3 -7.786377E-4 6.395953E-4 2.586189E-3 4.254699E-3 6.117868E-3 7.619526E-3 7.508292E-3 5.951017E-3 3.003317E-3 -9.176802E-4 -1.195765E-3 -1.362616E-3 -1.557275E-3 -1.751935E-3 " +
                "-2.085637E-3 -1.084531E-3 -1.251382E-3 -1.112340E-3 -1.223573E-3 -7.786377E-4 -8.620631E-4 -3.893189E-4 -4.449358E-4 3.337019E-4 1.167957E-3 9.454886E-4 3.893189E-4 -8.342547E-4 -9.176802E-4 -1.195765E-3 -1.306999E-3 -1.585084E-3 -1.696318E-3 " +
                "-2.113445E-3 -1.140148E-3 -1.195765E-3 -1.140148E-3 -1.167957E-3 -7.786377E-4 -8.342547E-4 -3.893189E-4 -4.171273E-4 -1.279191E-3 -1.251382E-3 -1.195765E-3 -1.195765E-3 -8.342547E-4 -8.620631E-4 -1.223573E-3 -1.251382E-3 -1.612892E-3 -1.668509E-3";

            string[] tokens = myfile.Split(new char[1] {
                ' '
            });
            double[,] map = new double[19, 19];
            for (int i = 0; i < 19; ++i)
            {
                for (int j = 0; j < 19; ++j)
                {
                    map[i, j] = Convert.ToDouble(tokens[i * 19 + j], new
                                                 System.Globalization.CultureInfo("en-US"));
                }
            }

            plotSurface.Clear();

            plotSurface.Title = "Cathode 11.2 QE Map";

            ImagePlot ip = new ImagePlot(map, -9.0f, 1.0f, -9.0f, 1.0f);

            //ip.Gradient = new StepGradient( StepGradient.Type.Rainbow );
            ip.Gradient = new LinearGradient(Color.Gold, Color.Black);

            plotSurface.Add(ip);
            plotSurface.XAxis1.Label = "x [mm]";
            plotSurface.YAxis1.Label = "y [mm]";

            plotSurface.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;

            //plotSurface.AddAxesConstraint( new AxesConstraint.AxisPosition( PlotSurface2D.YAxisPosition.Left, 0) );
            //plotSurface.AddAxesConstraint( new AxesConstraint.AxisPosition( PlotSurface2D.XAxisPosition.Top, 0.0f) );
            //plotSurface.AddAxesConstraint(
            //	new AxesConstraint.YPixelWorldLength(0.1f,PlotSurface2D.XAxisPosition.Bottom) );
            //plotSurface.AddAxesConstraint( new AxesConstraint.AspectRatio(1.0,PlotSurface2D.XAxisPosition.Top,PlotSurface2D.YAxisPosition.Left) );

            plotSurface.AddInteraction(new PlotSelection());

            plotSurface.Refresh();
        }
Example #26
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            // draw a fine grid.
            Grid fineGrid = new Grid();

            fineGrid.VerticalGridType   = Grid.GridType.Fine;
            fineGrid.HorizontalGridType = Grid.GridType.Fine;
            plotSurface.Add(fineGrid);

            const int npt = 101;

            float[] x    = new float[npt];
            float[] y    = new float[npt];
            float   step = 0.1f;

            for (int i = 0; i < npt; ++i)
            {
                x[i] = i * step - 5.0f;
                y[i] = (float)Math.Pow(10.0, x[i]);
            }
            float xmin = x[0];
            float xmax = x[npt - 1];
            float ymin = (float)Math.Pow(10.0, xmin);
            float ymax = (float)Math.Pow(10.0, xmax);

            LinePlot lp = new LinePlot();

            lp.OrdinateData = y;
            lp.AbscissaData = x;
            lp.Pen          = new Pen(Color.Red);
            plotSurface.Add(lp);

            LogAxis loga = new LogAxis(plotSurface.YAxis1);

            loga.WorldMin      = ymin;
            loga.WorldMax      = ymax;
            loga.AxisColor     = Color.Red;
            loga.LabelColor    = Color.Red;
            loga.TickTextColor = Color.Red;
            loga.LargeTickStep = 1.0f;
            loga.Label         = "10^x";
            plotSurface.YAxis1 = loga;

            LinePlot lp1 = new LinePlot();

            lp1.OrdinateData = y;
            lp1.AbscissaData = x;
            lp1.Pen          = new Pen(Color.Blue);
            plotSurface.Add(lp1, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Right);
            LinearAxis lin = new LinearAxis(plotSurface.YAxis2);

            lin.WorldMin       = ymin;
            lin.WorldMax       = ymax;
            lin.AxisColor      = Color.Blue;
            lin.LabelColor     = Color.Blue;
            lin.TickTextColor  = Color.Blue;
            lin.Label          = "10^x";
            plotSurface.YAxis2 = lin;

            LinearAxis lx = (LinearAxis)plotSurface.XAxis1;

            lx.WorldMin = xmin;
            lx.WorldMax = xmax;
            lx.Label    = "x";

            //((LogAxis)plotSurface.YAxis1).LargeTickStep = 2;

            plotSurface.Title = "Mixed Linear/Log Axes";

            //plotSurface.XAxis1.LabelOffset = 20.0f;

            plotSurface.Refresh();
        }
Example #27
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            Grid mygrid = new Grid();

            mygrid.VerticalGridType = Grid.GridType.Coarse;
            Pen majorGridPen = new Pen(Color.LightGray);

            float[] pattern = { 1.0f, 2.0f };
            majorGridPen.DashPattern = pattern;
            mygrid.MajorGridPen      = majorGridPen;
            plotSurface.Add(mygrid);

            float[] xs  = { 20.0f, 31.0f, 27.0f, 38.0f, 24.0f, 3.0f, 2.0f };
            float[] xs2 = { 7.0f, 10.0f, 42.0f, 9.0f, 2.0f, 79.0f, 70.0f };
            float[] xs3 = { 1.0f, 20.0f, 20.0f, 25.0f, 10.0f, 30.0f, 30.0f };

            HistogramPlot hp = new HistogramPlot();

            hp.DataSource     = xs;
            hp.BaseWidth      = 0.6f;
            hp.RectangleBrush =
                new RectangleBrushes.HorizontalCenterFade(Color.FromArgb(255, 255, 200), Color.White);
            hp.Filled = true;
            hp.Label  = "Developer Work";

            HistogramPlot hp2 = new HistogramPlot();

            hp2.DataSource     = xs2;
            hp2.Label          = "Web Browsing";
            hp2.RectangleBrush = RectangleBrushes.Horizontal.FaintGreenFade;
            hp2.Filled         = true;
            hp2.StackedTo(hp);

            HistogramPlot hp3 = new HistogramPlot();

            hp3.DataSource     = xs3;
            hp3.Label          = "P2P Downloads";
            hp3.RectangleBrush = RectangleBrushes.Vertical.FaintBlueFade;
            hp3.Filled         = true;
            hp3.StackedTo(hp2);

            plotSurface.Add(hp);
            plotSurface.Add(hp2);
            plotSurface.Add(hp3);

            plotSurface.Legend = new Legend();

            LabelAxis la = new LabelAxis(plotSurface.XAxis1);

            la.AddLabel("Monday", 0.0f);
            la.AddLabel("Tuesday", 1.0f);
            la.AddLabel("Wednesday", 2.0f);
            la.AddLabel("Thursday", 3.0f);
            la.AddLabel("Friday", 4.0f);
            la.AddLabel("Saturday", 5.0f);
            la.AddLabel("Sunday", 6.0f);
            la.Label            = "Days";
            la.TickTextFont     = new Font("Courier New", 8);
            la.TicksBetweenText = true;

            plotSurface.XAxis1          = la;
            plotSurface.YAxis1.WorldMin = 0.0;
            plotSurface.YAxis1.Label    = "MBytes";
            ((LinearAxis)plotSurface.YAxis1).NumberOfSmallTicks = 1;

            plotSurface.Title = "Internet useage for user:\n johnc 09/01/03 - 09/07/03";

            plotSurface.XAxis1.TicksLabelAngle = 30.0f;

            plotSurface.PlotBackBrush = RectangleBrushes.Vertical.FaintRedFade;
            plotSurface.Refresh();
        }
Example #28
0
 /// <summary>
 /// Handles the mouse leave event
 /// </summary>
 /// <param name="ps">The plot surface</param>
 /// <returns>false</returns>
 public override bool DoMouseLeave(InteractivePlotSurface2D ps)
 {
     Hovering             = false;
     Lines.Canvas.Visible = false;
     return(false);
 }
Example #29
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            plotSurface.Clear();

            Grid mygrid = new Grid();

            mygrid.HorizontalGridType = Grid.GridType.Fine;
            mygrid.VerticalGridType   = Grid.GridType.Fine;
            plotSurface.Add(mygrid);

            // in this example we synthetize a particle distribution
            // in the x-x' phase space and plot it, with the rms Twiss
            // ellipse and desnity distribution
            const int Particle_Number = 500;

            float[] x = new float[Particle_Number];
            float[] y = new float[Particle_Number];
            // Twiss parameters for the beam ellipse
            // 5 mm mrad max emittance, 1 mm beta function
            float alpha, beta, gamma, emit;

            alpha = -2.0f;
            beta  = 1.0f;
            gamma = (1.0f + alpha * alpha) / beta;
            emit  = 4.0f;

            float da, xmax, xpmax;

            da    = -alpha / gamma;
            xmax  = (float)Math.Sqrt(emit / gamma);
            xpmax = (float)Math.Sqrt(emit * gamma);

            Random rand = new Random();

            // cheap randomizer on the unit circle
            for (int i = 0; i < Particle_Number; i++)
            {
                float r;
                do
                {
                    x[i] = (float)(2.0f * rand.NextDouble() - 1.0f);
                    y[i] = (float)(2.0f * rand.NextDouble() - 1.0f);
                    r    = (float)Math.Sqrt(x[i] * x[i] + y[i] * y[i]);
                } while (r > 1.0f);
            }

            // transform to the tilted twiss ellipse
            for (int i = 0; i < Particle_Number; ++i)
            {
                y[i] *= xpmax;
                x[i]  = x[i] * xmax + y[i] * da;
            }
            plotSurface.Title = "Beam Horizontal Phase Space and Twiss ellipse";

            PointPlot pp = new PointPlot();

            pp.OrdinateData = y;
            pp.AbscissaData = x;
            pp.Marker       = new Marker(Marker.MarkerType.FilledCircle, 4, new Pen(Color.Blue));
            plotSurface.Add(pp, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Left);

            // set axes
            LinearAxis lx = (LinearAxis)plotSurface.XAxis1;

            lx.Label = "Position - x [mm]";
            lx.NumberOfSmallTicks = 2;
            LinearAxis ly = (LinearAxis)plotSurface.YAxis1;

            ly.Label = "Divergence - x' [mrad]";
            ly.NumberOfSmallTicks = 2;

            // Draws the rms Twiss ellipse computed from the random data
            float[] xeli = new float[40];
            float[] yeli = new float[40];

            float a_rms, b_rms, g_rms, e_rms;

            Twiss(x, y, out a_rms, out b_rms, out g_rms, out e_rms);
            TwissEllipse(a_rms, b_rms, g_rms, e_rms, ref xeli, ref yeli);

            LinePlot lp = new LinePlot();

            lp.OrdinateData = yeli;
            lp.AbscissaData = xeli;
            plotSurface.Add(lp, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Left);
            lp.Pen = new Pen(Color.Red, 2.0f);
            // Draws the ellipse containing 100% of the particles
            // for a uniform distribution in 2D the area is 4 times the rms
            float[] xeli2 = new float[40];
            float[] yeli2 = new float[40];
            TwissEllipse(a_rms, b_rms, g_rms, 4.0F * e_rms, ref xeli2, ref yeli2);

            LinePlot lp2 = new LinePlot();

            lp2.OrdinateData = yeli2;
            lp2.AbscissaData = xeli2;
            plotSurface.Add(lp2, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Left);
            Pen p2 = new Pen(Color.Red, 2.0f);

            float[] pattern = { 5.0f, 40.0f };
            p2.DashPattern = pattern;
            lp2.Pen        = p2;

            // now bin the particle position to create beam density histogram
            float range, min, max;

            min   = (float)lx.WorldMin;
            max   = (float)lx.WorldMax;
            range = max - min;

            const int Nbin = 30;
            float     dx   = range / Nbin;

            float[] xbin = new float[Nbin + 1];
            float[] xh   = new float[Nbin + 1];

            for (int j = 0; j <= Nbin; ++j)
            {
                xbin[j] = min + j * range;
                if (j < Nbin)
                {
                    xh[j] = 0.0F;
                }
            }
            for (int i = 0; i < Particle_Number; ++i)
            {
                if (x[i] >= min && x[i] <= max)
                {
                    int j;
                    j      = Convert.ToInt32(Nbin * (x[i] - min) / range);
                    xh[j] += 1;
                }
            }
            StepPlot sp = new StepPlot();

            sp.OrdinateData = xh;
            sp.AbscissaData = new StartStep(min, range / Nbin);
            sp.Center       = true;
            plotSurface.Add(sp, PlotSurface2D.XAxisPosition.Bottom, PlotSurface2D.YAxisPosition.Right);
            // axis formatting
            LinearAxis ly2 = (LinearAxis)plotSurface.YAxis2;

            ly2.WorldMin           = 0.0f;
            ly2.Label              = "Beam Density [a.u.]";
            ly2.NumberOfSmallTicks = 2;
            sp.Pen = new Pen(Color.Green, 2);

            // Finally, refreshes the plot
            plotSurface.Refresh();
        }
Example #30
0
 public FinancialDemo()
 {
     this.volumePS = new InteractivePlotSurface2D();
     this.costPS   = new InteractivePlotSurface2D();
 }