Example #1
0
        /// <summary>
        /// Helper method for Clone.
        /// </summary>
        /// <param name="a">The original object to clone.</param>
        /// <param name="b">The cloned object.</param>
        protected static void DoClone(LabelAxis b, LabelAxis a)
        {
            Axis.DoClone(b, a);

            a.labels_  = (ArrayList)b.labels_.Clone();
            a.numbers_ = (ArrayList)b.numbers_.Clone();

            a.ticksBetweenText_    = b.ticksBetweenText_;
            a.sortDataIfNecessary_ = b.sortDataIfNecessary_;
        }
Example #2
0
        /// <summary>
        /// Deep copy of LabelAxis.
        /// </summary>
        /// <returns>A copy of the LinearAxis Class.</returns>
        public override object Clone()
        {
            LabelAxis a = new LabelAxis();

            // ensure that this isn't being called on a derived type. If it is, then oh no!
            if (this.GetType() != a.GetType())
            {
                throw new FlorenceException("Error. Clone method is not defined in derived type.");
            }
            DoClone(this, a);
            return(a);
        }
Example #3
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 #4
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 #5
0
        /// <summary>
        /// Helper method for Clone.
        /// </summary>
        /// <param name="a">The original object to clone.</param>
        /// <param name="b">The cloned object.</param>
        protected static void DoClone( LabelAxis b, LabelAxis a )
        {
            Axis.DoClone( b, a );

            a.labels_ = (ArrayList)b.labels_.Clone();
            a.numbers_ = (ArrayList)b.numbers_.Clone();

            a.ticksBetweenText_ = b.ticksBetweenText_;
            a.sortDataIfNecessary_ = b.sortDataIfNecessary_;
        }
Example #6
0
 /// <summary>
 /// Deep copy of LabelAxis.
 /// </summary>
 /// <returns>A copy of the LinearAxis Class.</returns>
 public override object Clone()
 {
     LabelAxis a = new LabelAxis();
     // ensure that this isn't being called on a derived type. If it is, then oh no!
     if (this.GetType() != a.GetType())
     {
         throw new FlorenceException( "Error. Clone method is not defined in derived type." );
     }
     DoClone( this, a );
     return a;
 }
Example #7
0
        public void CreatePlot(InteractivePlotSurface2D plotSurface)
        {
            this.plotSurface = plotSurface;

            this.Timer = new System.Timers.Timer();
            this.Timer.Interval = 500;
            this.Timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
            this.Timer.Enabled = true;
            plotSurface.Clear();

            int len = 24;
            string[] s = new string[len];
            PlotQEExampleValues = new double[len];
            PlotQEExampleTextValues = new string[len];

            Random r = new Random();

            for (int i = 0; i < len; i++)
            {
                PlotQEExampleValues[i] = 8.0f + 12.0f * (double)r.Next(10000) / 10000.0f;
                if (PlotQEExampleValues[i] > 18.0f)
                {
                    PlotQEExampleTextValues[i] = "KCsTe";
                }
                else
                {
                    PlotQEExampleTextValues[i] = "";
                }
                s[i] = i.ToString("00") + ".1";
            }

            PointPlot pp = new PointPlot();
            pp.DataSource = PlotQEExampleValues;
            pp.Marker = new Marker(Marker.MarkerType.Square, 10);
            pp.Marker.DropLine = true;
            pp.Marker.Pen = Pens.CornflowerBlue;
            pp.Marker.Filled = false;
            plotSurface.Add(pp);

            LabelPointPlot tp1 = new LabelPointPlot();
            tp1.DataSource = PlotQEExampleValues;
            tp1.TextData = PlotQEExampleTextValues;
            tp1.LabelTextPosition = LabelPointPlot.LabelPositions.Above;
            tp1.Marker = new Marker(Marker.MarkerType.None, 10);
            plotSurface.Add(tp1);

            LabelAxis la = new LabelAxis(plotSurface.XAxis1);
            for (int i = 0; i < len; ++i)
            {
                la.AddLabel(s[i], i);
            }
            FontFamily ff = new FontFamily("Verdana");
            la.TickTextFont = new Font(ff, 7);
            la.PhysicalSpacingMin = 25;
            plotSurface.XAxis1 = la;

            plotSurface.Title = "Cs2Te Photocathode QE evolution";
            plotSurface.TitleFont = new Font(ff, 15);
            plotSurface.XAxis1.WorldMin = -1.0f;
            plotSurface.XAxis1.WorldMax = len;
            plotSurface.XAxis1.LabelFont = new Font(ff, 10);
            plotSurface.XAxis1.Label = "Cathode ID";
            plotSurface.YAxis1.Label = "QE [%]";
            plotSurface.YAxis1.LabelFont = new Font(ff, 10);
            plotSurface.YAxis1.TickTextFont = new Font(ff, 10);

            plotSurface.YAxis1.WorldMin = 0.0;
            plotSurface.YAxis1.WorldMax = 25.0;

            plotSurface.XAxis1.TicksLabelAngle = 60.0f;

            plotSurface.Refresh();
        }