Example #1
0
        public void FormatChart()
        {
            ToolTipRelativePosition pos = new ToolTipRelativePosition();

            pos.OffsetX = -10;
            pos.OffsetY = -10;
            chart.ToolTipOptions.ToolTipPosition = pos;

            string mainTitleText = "";

            try
            {
                //mainTitleText = String.Format("{0}{1}{2} (N={3})"
                //		, _settings.title, Environment.NewLine, corrs.results(CorrPValueMode.CorrWithStars), corrs.n);
                mainTitleText = String.Format("{0} (N={1})"
                                              , corrs.results(CorrPValueMode.CorrWithStars), corrs.n);
            }
            catch (Exception ex) { }
            //string mainTitleText = ((Math.Abs(corrs.pearson - corrs.spearman)) > .2 ) ?
            //	String.Format("{0}{1} r={3:.00} s={4:.00} N={2}"
            //		, _settings.title, Environment.NewLine, corrs.n, corrs.pearson, corrs.spearman)
            //	: String.Format("{0}{1} r={3:.00} N={2}"
            //		, _settings.title, Environment.NewLine, corrs.n, corrs.pearson, corrs.spearman);

            chart.Width  = _settings.W;
            chart.Height = _settings.H;


            //AddTitles(mainTitleText, subtitles, _settings.xaxisvar, _settings.yaxisvar, 10);
            if (subtitles == null)
            {
                AddTitles(mainTitleText, "", _settings.xaxisvar, _settings.yaxisvar, 10);
            }
            else
            {
                if (subtitles.Count > 0 & _settings.panevar == "none")
                {
                    AddTitles(mainTitleText, subtitles, _settings.xaxisvar, _settings.yaxisvar, 10);
                }
                else
                {
                    AddTitles(mainTitleText, "", _settings.xaxisvar, _settings.yaxisvar, 10);
                }
            }

            chart.BorderOptions.Color = Color.White;

            chart.CustomDrawSeriesPoint += Scatterplot_TransparentPoint;
            //chart.CustomCallback += _dxcharts.Mychart_CustomCallback;

            chart.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True;
            chart.ToolTipOptions.ShowForPoints = true;

            chart.CrosshairEnabled     = DevExpress.Utils.DefaultBoolean.False;
            chart.SaveStateOnCallbacks = true;
            chart.Legend.MarkerMode    = LegendMarkerMode.CheckBoxAndMarker;
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // Create an empty chart.
            ChartControl chartControl = new ChartControl();

            // Add the chart to the form.
            chartControl.Dock = DockStyle.Fill;
            this.Controls.Add(chartControl);

            // Create a series and add points to it.
            Series boundSeries = new Series("Bound Series", ViewType.Line);

            // Assign the created data source to the series.
            boundSeries.DataSource         = CreateChartData();
            boundSeries.ArgumentScaleType  = ScaleType.Auto;
            boundSeries.ArgumentDataMember = "Argument";
            boundSeries.ValueScaleType     = ScaleType.Numerical;
            boundSeries.ValueDataMembers.AddRange(new string[] { "Value" });

            Series unboundSeries = new Series("Unbound Series", ViewType.Line);

            unboundSeries.Points.Add(new SeriesPoint("A", new double[] { 9 }));
            unboundSeries.Points.Add(new SeriesPoint("B", new double[] { 7 }));
            unboundSeries.Points.Add(new SeriesPoint("C", new double[] { 23 }));
            unboundSeries.Points.Add(new SeriesPoint("D", new double[] { 9 }));
            unboundSeries.Points.Add(new SeriesPoint("E", new double[] { 23 }));
            unboundSeries.Points.Add(new SeriesPoint("F", new double[] { 17 }));
            unboundSeries.Points.Add(new SeriesPoint("G", new double[] { 20 }));

            Series unboundSeriesWithTag = new Series("Unbound Series with Tag", ViewType.Line);

            unboundSeriesWithTag.Points.Add(new SeriesPoint("A", 2)
            {
                Tag = new { Test = "TestValue" }
            });
            unboundSeriesWithTag.Points.Add(new SeriesPoint("B", 0)
            {
                Tag = new { Test = "TestValue" }
            });
            unboundSeriesWithTag.Points.Add(new SeriesPoint("C", 15)
            {
                Tag = new { Test = "TestValue" }
            });
            unboundSeriesWithTag.Points.Add(new SeriesPoint("D", 2)
            {
                Tag = new { Test = "TestValue" }
            });
            unboundSeriesWithTag.Points.Add(new SeriesPoint("E", 15)
            {
                Tag = new { Test = "TestValue" }
            });
            unboundSeriesWithTag.Points.Add(new SeriesPoint("F", 10)
            {
                Tag = new { Test = "TestValue" }
            });
            unboundSeriesWithTag.Points.Add(new SeriesPoint("G", 13)
            {
                Tag = new { Test = "TestValue" }
            });

            // Add the series to the chart.
            chartControl.Series.AddRange(unboundSeries, unboundSeriesWithTag, boundSeries);
            // Enable data point markers.
            ((LineSeriesView)unboundSeries.View).MarkerVisibility        = DefaultBoolean.True;
            ((LineSeriesView)unboundSeriesWithTag.View).MarkerVisibility = DefaultBoolean.True;
            ((LineSeriesView)boundSeries.View).MarkerVisibility          = DefaultBoolean.True;
            // Disable a crosshair cursor.
            chartControl.CrosshairEnabled = DefaultBoolean.False;

            // Enable chart tooltips.
            chartControl.ToolTipEnabled = DefaultBoolean.True;

            // Show a tooltip's beak.
            ToolTipController controller = new ToolTipController();

            chartControl.ToolTipController = controller;
            controller.ShowBeak            = true;

            // Change the default tooltip mouse position to relative position.
            ToolTipRelativePosition relativePosition = new ToolTipRelativePosition();

            chartControl.ToolTipOptions.ToolTipPosition = relativePosition;

            // Specify the tooltip relative position offsets.
            relativePosition.OffsetX = 2;
            relativePosition.OffsetY = 2;

            // Specify the tooltip point pattern.
            unboundSeries.ToolTipPointPattern        = "Line Series: {A}:{V}";
            unboundSeriesWithTag.ToolTipPointPattern = "{A}: {V} ({Test})";
            boundSeries.ToolTipPointPattern          = "{A}: {V} ({Comment})";
        }
Example #3
0
        public void CreateLineplot(DataTable mydt)
        {
            _coloroverride = -1;
            string seriesby = _settings.seriesby;
            string colorsby = _settings.colorvar;
            Color  myseriescolor;

            DataTable dataxy_all = DataTableExtensions.Data_SelectColumnXY(mydt, _settings.xaxisvar, _settings.yaxisvar, seriesby, colorsby);


            List <string> series_levels = dataxy_all.AsEnumerable().Select(x => x.Field <string>("seriesby")).Distinct().ToList();
            List <string> colors_levels = dataxy_all.AsEnumerable().Select(x => x.Field <string>("colorsby")).Distinct().ToList();

            colors_levels.Sort();

            _colorLevels = colors_levels;             //use this to create a manual legend later if needed


            List <string> seriesIDs = new List <string>();

            if (seriesby == "id")
            {
                seriesIDs = dataxy_all.AsEnumerable().Select(x => x.Field <string>("id")).Distinct().ToList();
            }
            else
            {
                seriesIDs = dataxy_all.AsEnumerable().Select(x => x.Field <string>("seriesby")).Distinct().ToList();
            }


            int _nall = dataxy_all.Rows.Count;

            if (_nall > 0)
            {
                List <Series> list_o_series = new List <Series>();

                //foreach (string s in seriesIDs)
                for (int s = 0; s < seriesIDs.Count; s++)
                {
                    for (int s_color = 0; s_color < colors_levels.Count; s_color++)
                    {
                        dataxy_all.DefaultView.Sort             = "seriesby ASC, colorsby ASC, x ASC";
                        dataxy_all.DefaultView.ApplyDefaultSort = true;
                        DataView vw = dataxy_all.AsDataView();

                        string rowfilter = (seriesby == "id") ?
                                           String.Format("{0}='{1}' and colorsby='{2}'", seriesby, seriesIDs[s], colors_levels[s_color]) :
                                           String.Format("{0}='{1}' and colorsby='{2}'", "seriesby", seriesIDs[s], colors_levels[s_color]);

                        //string rowfilter = (seriesby == "id") ?
                        //			String.Format("{0}='{1}'", seriesby, seriesIDs[s]) :
                        //			String.Format("{0}='{1}'", "seriesby", seriesIDs[s]);

                        vw.RowFilter = rowfilter;
                        //vw.Sort = String.Format("{0} {1}", "x", "ASC");  //sort by the x variable
                        //vw.ApplyDefaultSort = true;

                        DataTable dataxy = vw.ToTable();

                        dataxy.DefaultView.Sort             = "x ASC";
                        dataxy.DefaultView.ApplyDefaultSort = true;

                        n = dataxy.Rows.Count;

                        if (n > 0)
                        {
                            string        current_colorlevel = dataxy.AsEnumerable().Select(f => f.Field <string>("colorsby")).Min().ToString();
                            List <string> series_colors      = dataxy.AsEnumerable().Select(f => f.Field <string>("colorsby")).ToList();


                            //Switch to alternate geom if needed
                            if (_settings.vars_for_altgeom.Contains(current_colorlevel))
                            {
                                _settings.activegeom = _settings.altgeom;
                            }
                            else
                            {
                                _settings.activegeom = _settings.geom;
                            }


                            int colorindex = 0;

                            //Get the correct color
                            if (colorsby != "none")
                            {
                                for (int c = 0; c < colors_levels.Count; c++)
                                {
                                    if (current_colorlevel == colors_levels[c])
                                    {
                                        colorindex = c;
                                    }
                                }
                            }
                            myseriescolor = _settings.color(colorindex % 15);

                            if (_coloroverride >= 0)
                            {
                                myseriescolor = _settings.color(_coloroverride % 15);
                            }


                            SeriesPoint[] seriesPoints = CreateSeriesPoints(dataxy, colorsby, colors_levels, series_colors, colorindex, myseriescolor);
                            //TOFIX SeriesPoint[] seriesPoints = new DxSeriesPoints(dataxy, "x", "y", colorsby, colors_levels, series_colors, colorindex, myseriescolor);


                            Series series = new Series();

                            SideBySideBarSeriesView barSeriesView   = new SideBySideBarSeriesView();
                            LineSeriesView          lineSeriesView  = new LineSeriesView();
                            PointSeriesView         pointSeriesView = new PointSeriesView();

                            if (_settings.activegeom == LineplotGeom.Bar)
                            {
                                //barSeriesView = new SideBySideBarSeriesView() ;
                            }
                            else if (_settings.activegeom == LineplotGeom.Line)
                            {
                                //lineSeriesView = new LineSeriesView();
                                lineSeriesView.LineMarkerOptions.FillStyle.FillMode = FillMode.Solid;
                                lineSeriesView.LineMarkerOptions.Kind = _markers[s % _markers.Count];
                            }
                            else
                            {
                                pointSeriesView.PointMarkerOptions.FillStyle.FillMode = FillMode.Solid;
                                MarkerKind mymarker = new MarkerKind();

                                if (_settings.activegeom == LineplotGeom.Circle)
                                {
                                    mymarker = MarkerKind.Circle;
                                }
                                if (_settings.activegeom == LineplotGeom.Square)
                                {
                                    mymarker = MarkerKind.Square;
                                }
                                if (_settings.activegeom == LineplotGeom.Cross)
                                {
                                    mymarker = MarkerKind.Cross;
                                }
                                if (_settings.activegeom == LineplotGeom.Star)
                                {
                                    mymarker = MarkerKind.Star;
                                }

                                pointSeriesView.PointMarkerOptions.Kind = mymarker;
                                pointSeriesView.PointMarkerOptions.Size = _settings.markersize;

                                if (_settings.activegeom == LineplotGeom.Star)
                                {
                                    pointSeriesView.PointMarkerOptions.StarPointCount = 6;
                                }
                            }



                            if (_settings.xaxis_is_date)
                            {
                                this.xydiagram.AxisX.DateTimeScaleOptions.ScaleMode   = ScaleMode.Continuous;
                                this.xydiagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Month;
                                this.xydiagram.AxisX.Label.TextPattern = "{A:dd-MMM-yy}";
                                series.ToolTipPointPattern             = "x={A:dd-MMM-yy} y={V:F2} {HINT}";
                            }
                            else
                            {
                                series.ToolTipPointPattern = "x={A:F2} y={V:F2} {HINT}";
                            }


                            ToolTipRelativePosition pos = new ToolTipRelativePosition();
                            pos.OffsetX = -10;
                            pos.OffsetY = -10;
                            chart.ToolTipOptions.ToolTipPosition = pos;

                            if (_settings.activegeom == LineplotGeom.Bar)
                            {
                                series.View = barSeriesView;
                            }
                            else if (_settings.activegeom == LineplotGeom.Line)
                            {
                                series.View = lineSeriesView;
                            }
                            else
                            {
                                series.View = pointSeriesView;
                            }

                            series.Points.AddRange(seriesPoints);

                            list_o_series.Add(series);
                        }
                    }
                }

                //Add the series to the chart
                int max_pts = list_o_series.Select(s => s.Points.Count).Max();

                foreach (Series s in list_o_series)
                {
                    //first add those with the max number of points
                    if (s.Points.Count == max_pts)
                    {
                        chart.Series.Add(s);
                    }
                }
                foreach (Series s in list_o_series)
                {
                    //then add those with fewer points
                    if (s.Points.Count != max_pts)
                    {
                        chart.Series.Add(s);
                    }
                }


                // consider adding N=??, intrcpt=, slope=
                string mytitle       = "";
                string mainTitleText = String.Format("{0}", mytitle);                 //, seriesPoints.Count());

                chart.Width  = _settings.W;
                chart.Height = _settings.H;

                this.AddTitles(mainTitleText, "", _settings.xaxisvar, _settings.yaxisvar);

                chart.BorderOptions.Color = Color.White;

                chart.CustomDrawSeriesPoint += Lineplot_TransparentPoint;
                chart.CustomDrawSeries      += Lineplot_TransparentLine;

                //chart.CustomCallback += _dxcharts.Mychart_CustomCallback;

                chart.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True;
                chart.ToolTipOptions.ShowForSeries = true;

                chart.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;

                if (colorsby != "none")
                {
                    for (int lev = 0; lev < colors_levels.Count; lev++)
                    {
                        // Create a new custom item.
                        CustomLegendItem item = new CustomLegendItem();
                        chart.Legend.CustomItems.Add(item);
                        // Specify its text and marker.
                        item.Text = colors_levels[lev];
                        int coloridx = (_coloroverride >= 0) ? _coloroverride : lev;
                        item.MarkerColor = _settings.colors[coloridx % _settings.colors.Count];
                        //item.
                    }
                }



                chart.Legend.Visibility = (_settings.showLegend) ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;

                LegendAlignmentHorizontal legend_h = new LegendAlignmentHorizontal();
                LegendAlignmentVertical   legend_v = new LegendAlignmentVertical();

                if (_settings.legend_pos_h == "Right")
                {
                    legend_h = LegendAlignmentHorizontal.Right;
                }
                else if (_settings.legend_pos_h == "RightOutside")
                {
                    legend_h = LegendAlignmentHorizontal.RightOutside;
                }
                else if (_settings.legend_pos_h == "Left")
                {
                    legend_h = LegendAlignmentHorizontal.Left;
                }
                else if (_settings.legend_pos_h == "LeftOutside")
                {
                    legend_h = LegendAlignmentHorizontal.LeftOutside;
                }
                else if (_settings.legend_pos_h == "Center")
                {
                    legend_h = LegendAlignmentHorizontal.Center;
                }

                if (_settings.legend_pos_v == "Top")
                {
                    legend_v = LegendAlignmentVertical.Top;
                }
                else if (_settings.legend_pos_v == "TopOutside")
                {
                    legend_v = LegendAlignmentVertical.TopOutside;
                }
                else if (_settings.legend_pos_v == "Bottom")
                {
                    legend_v = LegendAlignmentVertical.Bottom;
                }
                else if (_settings.legend_pos_v == "BottomOutside")
                {
                    legend_v = LegendAlignmentVertical.BottomOutside;
                }
                else if (_settings.legend_pos_v == "Center")
                {
                    legend_v = LegendAlignmentVertical.Center;
                }



                chart.Legend.AlignmentHorizontal = legend_h;
                chart.Legend.AlignmentVertical   = legend_v;

                // Set a value indicating that both autogenerated and custom items are displayed.
                chart.Legend.ItemVisibilityMode = LegendItemVisibilityMode.AutoGeneratedAndCustom;
            }
            else
            {
                //_emptymsg = String.Format("0 cases for{3}{0}{3}{1} by {2}", mytitle, xvar, yvar, Environment.NewLine);
                //return null;
            }
        }
Example #4
0
        private void CreateEventsOnCharts(ChartRenderModel model, int width, int chartsCount, bool isMultiPaneChart = false)
        {
            Series series2 = new Series("My Series2", ViewType.Bar);

            series2.ArgumentDataMember  = "Datum";
            series2.ArgumentScaleType   = ScaleType.DateTime;
            series2.ValueDataMembers[0] = "Vrednost";

            series2.ValueScaleType = ScaleType.Numerical;

            ((SideBySideBarSeriesView)series2.View).BarWidth = 1.4;

            double maxVrednost = Convert.ToDouble(model.chartRenderData.Max(crd => crd.Vrednost));

            if (model.EventList.Count > 0)
            {
                EventLinkWrap.Style.Add("max-width", ((width / chartsCount) - 50).ToString() + "px");
                model.EventList = model.EventList.OrderBy(el => el.DatumOtvoritve).ToList();//we sor elements from the youngest event to the oldest
                foreach (EventSimpleModel item in model.EventList)
                {
                    SeriesPoint point = new SeriesPoint(item.DatumOtvoritve, new double[] { maxVrednost });
                    point.ToolTipHint = item.DatumOtvoritve.ToString("dd MMMM yyyy") + (String.IsNullOrEmpty(item.Opis) ? "" : "\r\n" + "Opis: " + item.Opis);
                    series2.Points.Add(point);
                    string link = RedirectToEvent(item.idDogodek, item.idStranka, item.idKategorija, item.Izvajalec);
                    EventLinkWrap.InnerHtml += "<div class='eventLinkWrap'><a class='eventLink' href='" + link + "' title='Pojdi na dogodek st.: "
                                               + item.idDogodek.ToString() + "'>" + item.DatumOtvoritve.ToString("dd MMMM yyyy") + "</a></div>";
                }

                ToolTipRelativePosition relativePosition = new ToolTipRelativePosition();
                WebChartControl1.ToolTipOptions.ToolTipPosition = relativePosition;

                relativePosition.OffsetX = 2;
                relativePosition.OffsetY = 2;

                series2.ToolTipEnabled      = DevExpress.Utils.DefaultBoolean.True;
                series2.ToolTipPointPattern = "Datum dogodka: {HINT}";

                series2.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;
            }

            WebChartControl1.Series.Add(series2);

            int newMinValue = -10;

            if (maxVrednost > 1000)
            {
                newMinValue = -100;
            }
            else if (maxVrednost > 100)
            {
                newMinValue = -10;
            }
            else
            {
                newMinValue = -1;
            }

            DateTimeGridAlignment dateTimeGridAlignment = DateTimeGridAlignment.Month;

            if (CommonMethods.ParseInt(rbPeriod.Value) == (int)Enums.ChartRenderPeriod.LETNO)
            {
                dateTimeGridAlignment = DateTimeGridAlignment.Year;
            }


            ((XYDiagram)WebChartControl1.Diagram).AxisX.Label.ResolveOverlappingOptions.AllowHide = false;
            if (!isMultiPaneChart)
            {
                ((XYDiagram)WebChartControl1.Diagram).AxisX.DateTimeScaleOptions.GridAlignment = dateTimeGridAlignment;
            }
            /*((XYDiagram)WebChartControl1.Diagram).AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Month;*/
            ((XYDiagram)WebChartControl1.Diagram).AxisX.Label.ResolveOverlappingOptions.AllowRotate = true;
            ((XYDiagram2D)WebChartControl1.Diagram).EnableAxisYZooming = true;
            ((XYDiagram2D)WebChartControl1.Diagram).GetAllAxesY()[0].WholeRange.MinValue = newMinValue;
        }