private XYDiagramPaneBase CheckAddPanel(StrategyDataItemInfo info)
        {
            XYDiagram diagram = (XYDiagram)Chart.Diagram;

            if (diagram == null)
            {
                return(null);
            }
            diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false;
            if (info.PanelName == "Default")
            {
                return(diagram.DefaultPane);
            }
            XYDiagramPane pane = null;

            if (diagram.Panes[info.PanelName] != null)
            {
                pane = diagram.Panes[info.PanelName];
            }
            IResizeableArray items = GetDataSource(info) as IResizeableArray;

            if (items != null && !(GetArgumentValue(info, items.GetItem(0)) is DateTime))
            {
                if (info.PanelName == "Default")
                {
                }
                else
                {
                    SecondaryAxisX axisX = new SecondaryAxisX();
                    axisX.Name = info.AxisXName;
                    diagram.SecondaryAxesX.Add(axisX);
                }
            }

            if (pane == null || info.Reversed)
            {
                SecondaryAxisY axis = new SecondaryAxisY();
                axis.Assign(diagram.AxisY);
                axis.Name    = info.AxisYName;
                axis.Reverse = info.Reversed;
                diagram.SecondaryAxesY.Add(axis);
            }
            if (pane == null)
            {
                pane = new XYDiagramPane()
                {
                    Name = info.PanelName
                };
                diagram.Panes.Add(pane);
                Legend l = new Legend();
                l.Assign(Chart.Legend); l.Name = info.PanelName;
                l.DockTarget = pane;
                Chart.Legends.Add(l);
            }
            if (!info.PanelVisible)
            {
                pane.Visibility = ChartElementVisibility.Hidden;
            }
            return(pane);
        }
Exemple #2
0
        public void AddSeriesPaneToChart(string textFormatString, object[] values, string[] labelStrings, Color color)
        {
            object[] array  = values;
            string[] months = labelStrings;
            Series   series = GetSeries(textFormatString, color, array, months);

            int seriesPosition           = chartControl1.Series.Add(series);
            XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)series.View;

            XYDiagram diag         = chartControl1.Diagram as XYDiagram;
            int       axesPosition = diag.SecondaryAxesY.Add(new SecondaryAxisY());

            if (seriesPosition > 0)
            {
                XYDiagramPane pane = new XYDiagramPane();
                pane.SizeMode = PaneSizeMode.UseWeight;

                diag.Panes.Add(pane);
                diag.SecondaryAxesY[axesPosition].Alignment         = AxisAlignment.Near;
                diag.SecondaryAxesY[axesPosition].GridLines.Visible = true;
                view.AxisY = diag.SecondaryAxesY[axesPosition];
                view.Pane  = pane;
            }
            else
            {
                diag.SecondaryAxesY[seriesPosition].Visible = false;
                view.AxisX.Label.Angle = 90;
            }

            diag.EnableZooming   = true;
            diag.EnableScrolling = true;

            chartControl1.Height += 400;
        }
Exemple #3
0
        public void MakePanes(List <string> panenames, List <string> panesubtitles)
        {
            for (int i = 0; i < panenames.Count; i++)
            {
                string p         = panenames[i];
                string psubtitle = "";
                if (panesubtitles.Count > panenames.Count)
                {
                    foreach (string psub in panesubtitles)
                    {
                        if (psub.StartsWith(String.Format("{0} : ", p)))
                        {
                            psubtitle += String.Format("{0}{1}", psub, Environment.NewLine);
                        }
                    }
                }
                else
                {
                    psubtitle = panesubtitles[i];
                }
                // Obtain a diagram and clear its collection of panes.
                XYDiagramPane pane = new XYDiagramPane(p);
                xydiagram.Panes.Add(pane);

                string paneltitle = (p != psubtitle) ? String.Format("{0}{1}{2}", p, Environment.NewLine, psubtitle) : p;
                pane.Title.Text                = paneltitle;
                pane.Title.Visibility          = DefaultBoolean.True;
                xydiagram.PaneLayout.Direction = _settings.panesLayoutDirection;                 // PaneLayoutDirection.Horizontal;
                Debug.WriteLine(String.Format("**********************************   # of Panes: {0} {1}", xydiagram.Panes.Count, p));
            }
        }
Exemple #4
0
 protected void AssignCurveSeriesList(IEnumerable <Series> seriesList, XYDiagramPane pane, SecondaryAxisY axisY)
 {
     foreach (var series in seriesList)
     {
         var view = series.View.DowncastTo <XYDiagramSeriesViewBase>();
         view.Pane  = pane;
         view.AxisY = axisY;
     }
 }
Exemple #5
0
        public virtual void AddTitleTo(XYDiagramPane pane, string title)
        {
            var textAnnotation = pane.Annotations.AddTextAnnotation(Guid.NewGuid().ToString(), title);

            textAnnotation.Visible       = true;
            textAnnotation.ShapePosition = new FreePosition {
                DockTarget = pane, DockCorner = DockCorner.LeftTop
            };
            textAnnotation.BackColor      = Color.FromArgb(80, Color.White);
            textAnnotation.ShapeKind      = ShapeKind.Rectangle;
            textAnnotation.ConnectorStyle = AnnotationConnectorStyle.None;
            textAnnotation.Font           = new Font(textAnnotation.Font, FontStyle.Bold);
        }
        protected override XYDiagramPaneBase GetPane()
        {
            if (ChartContext.Chart.Diagram is not XYDiagram diagram)
            {
                return(null);
            }

            var pane = new XYDiagramPane(Name);

            diagram.Panes.Add(pane);

            return(pane);
        }
Exemple #7
0
        public void AddPanes(int numpanes, PaneLayoutDirection layoutdirection)
        {
            //Panes
            for (int i = 0; i < numpanes; i++)
            {
                XYDiagramPane pane = new XYDiagramPane(String.Format("pane{0}", i));
                pane.Title.Text       = String.Format("foo {0}", i);
                pane.Title.Alignment  = StringAlignment.Near;
                pane.Title.Visibility = DefaultBoolean.True;

                _xydiagram.Panes.Add(pane);
            }
            _xydiagram.PaneLayout.Direction = layoutdirection;
        }
Exemple #8
0
        public void barchart_BoundDataChanged(object sender, EventArgs e)
        {
            var chart = (WebChartControl)sender;


            for (int i = 0; i < chart.Series.Count(); i++)
            {
                var x     = chart.Series[i];
                var sname = x.Name;

                Debug.WriteLine(String.Format("sname={0}", sname));

                //Color mycolor = _settings.colors[i % _settings.colors.Count];

                //((SideBySideBarSeriesView)chart.Series[i].View).Color = mycolor;
                //((SideBySideBarSeriesView)chart.Series[i].View).FillStyle.FillMode = FillMode.Solid;
            }

            //https://documentation.devexpress.com/WindowsForms/4942/Controls-and-Libraries/Chart-Control/Examples/Chart-Elements/How-to-Display-Automatically-Created-Series-in-Separate-Panes


            if (chart.Series.Count > 0)
            {
                // Obtain a diagram and clear its collection of panes.
                XYDiagram diagram = (XYDiagram)chart.Diagram;
                diagram.Panes.Clear();
                // Create a pane for each series.
                for (int i = 1; i < chart.Series.Count; i++)
                {
                    XYDiagramPane pane = new XYDiagramPane("The Pane's Name");
                    diagram.Panes.Add(pane);
                    XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chart.Series[i].View;

                    //view.Indicators.Add(new DataSourceBasedErrorBars
                    //{
                    //	Direction = ErrorBarDirection.Both,
                    //	Name = "SD",
                    //	Color = Color.Black,
                    //	PositiveErrorDataMember = "SD",
                    //	NegativeErrorDataMember = "SD"
                    //});

                    view.Pane = pane;

                    diagram.PaneLayout.Direction = PaneLayoutDirection.Horizontal;
                }
            }
        }
        private void OnChartBoundDataChanged(object sender, EventArgs e)
        {
            ChartControl chart = (ChartControl)sender;

            if (chart.Series.Count > 0)
            {
                XYDiagram diagram = (XYDiagram)chart.Diagram;
                diagram.Panes.Clear();
                for (int i = 1; i < chart.Series.Count; i++)
                {
                    XYDiagramPane pane = new XYDiagramPane(String.Format(@"Pane {0}", i));
                    diagram.Panes.Add(pane);
                    XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chart.Series[i].View;
                    view.Pane = pane;
                }
            }
        }
Exemple #10
0
        public SCChart AddPane(string name, PaneOptions options = null)
        {
            if (Chart.Diagram is not XYDiagram diagram)
            {
                throw new Exception("Cannot determine chart's pane to apply settings. Ensure that chart is 2D XY chart.");
            }

            options ??= new PaneOptions();

            var pane = new XYDiagramPane(name);

            diagram.Panes.Add(pane);

            options.SetupXtraChartsPane(pane);

            return(this);
        }
Exemple #11
0
        private XYDiagramPaneBase CheckAddPanel(StrategyDataItemInfo info)
        {
            XYDiagram diagram = (XYDiagram)Chart.Diagram;

            if (diagram == null)
            {
                return(null);
            }
            diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false;
            if (info.PanelName == "Default")
            {
                return(diagram.DefaultPane);
            }
            XYDiagramPane pane = null;

            if (diagram.Panes[info.PanelName] != null)
            {
                pane = diagram.Panes[info.PanelName];
            }

            if (pane == null || info.Reversed)
            {
                SecondaryAxisY axis = new SecondaryAxisY();
                axis.Assign(diagram.AxisY);
                axis.Name    = info.AxisYName;
                axis.Reverse = info.Reversed;
                diagram.SecondaryAxesY.Add(axis);
            }
            if (pane == null)
            {
                pane = new XYDiagramPane()
                {
                    Name = info.PanelName
                };
                diagram.Panes.Add(pane);
                Legend l = new Legend();
                l.Assign(Chart.Legend); l.Name = info.PanelName;
                l.DockTarget = pane;
                Chart.Legends.Add(l);
            }
            if (!info.PanelVisible)
            {
                pane.Visibility = ChartElementVisibility.Hidden;
            }
            return(pane);
        }
Exemple #12
0
        private void SetChartType()
        {
            XYDiagram diagram = (XYDiagram)chartControl1.Diagram;

            if (rbChartType.SelectedIndex == 0)
            {
                diagram.Panes.Clear();
                for (int i = 1; i < chartControl1.Series.Count; i++)
                {
                    XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chartControl1.Series[i].View;
                    view.Pane = diagram.DefaultPane;
                    chartControl1.Series[i].CheckedInLegend   = true;
                    chartControl1.Series[i].CheckableInLegend = true;
                }
            }
            if (rbChartType.SelectedIndex > 0 && chartControl1.Series.Count > 0)
            {
                diagram.Panes.Clear();
                for (int i = 1; i < chartControl1.Series.Count; i++)
                {
                    XYDiagramPane pane = new XYDiagramPane($@"Pane {i}");
                    diagram.Panes.Add(pane);

                    XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chartControl1.Series[i].View;
                    view.Pane = pane;
                    chartControl1.Series[i].CheckedInLegend   = true;
                    chartControl1.Series[i].CheckableInLegend = true;
                }
            }

            if (rbChartType.SelectedIndex == 1)
            {
                diagram.PaneLayout.Direction      = PaneLayoutDirection.Vertical;
                diagram.PaneLayout.AutoLayoutMode = PaneAutoLayoutMode.Linear;
            }
            else if (rbChartType.SelectedIndex == 2)
            {
                diagram.PaneLayout.Direction      = PaneLayoutDirection.Horizontal;
                diagram.PaneLayout.AutoLayoutMode = PaneAutoLayoutMode.Linear;
            }
            else if (rbChartType.SelectedIndex == 3)
            {
                diagram.PaneLayout.AutoLayoutMode = PaneAutoLayoutMode.Grid;
            }
        }
Exemple #13
0
        void ChartControl1_BoundDataChanged(object sender, EventArgs e)
        {
            XYDiagram diagram = (XYDiagram)chartControl1.Diagram;

            diagram.AxisX.Label.Visible    = false;
            diagram.PaneLayout.Direction   = PaneLayoutDirection.Horizontal;
            diagram.DefaultPane.Visibility = ChartElementVisibility.Hidden;
            for (int i = 0; i < chartControl1.Series.Count; i++)
            {
                XYDiagramPane pane   = new XYDiagramPane();
                Series        series = chartControl1.Series[i];
                pane.Title.Text       = series.Name;
                pane.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
                diagram.Panes.Add(pane);
                ((XYDiagramSeriesViewBase)series.View).Pane = pane;
                ((WaterfallSeriesView)series.View).ValueOptions.ShowTotal = true;
            }
        }
 void CustomizeDiagram(XYDiagram diagram, SeriesCollection series, MultiPaneSettings settings)
 {
     if (settings.MultiPaneEnabled)
     {
         diagram.PaneLayout.AutoLayoutMode = settings.UseGridLayout ? PaneAutoLayoutMode.Grid : PaneAutoLayoutMode.Linear;
         diagram.RuntimePaneCollapse       = settings.AllowPaneCollapsing;
         List <Series> seriesWithPoints = series.Cast <Series>().Where(s => s.Points.Any()).ToList();
         for (int i = 0; i < seriesWithPoints.Count; i++)
         {
             if (i != 0)
             {
                 diagram.Panes.Add(new XYDiagramPane());
             }
             XYDiagramPane pane = diagram.Panes[i];
             (seriesWithPoints[i].View as XYDiagramSeriesViewBase).Pane = pane;
             if (settings.ShowPaneTitles)
             {
                 pane.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
                 pane.Title.Text       = seriesWithPoints[i].Name;
             }
             else
             {
                 pane.Title.Visibility = DevExpress.Utils.DefaultBoolean.False;
             }
         }
         //foreach (XYDiagramPane pane in diagram.Panes)
         //{
         //    if (diagram.Rotated)
         //    {
         //        if (pane == diagram.Panes[0])
         //            diagram.AxisX.SetVisibilityInPane(true, pane);
         //        else
         //            diagram.AxisX.SetVisibilityInPane(false, pane);
         //    }
         //    else //not rotated
         //    {
         //        if (pane == diagram.Panes[diagram.Panes.Count - 1])
         //            diagram.AxisX.SetVisibilityInPane(true, pane);
         //        else
         //            diagram.AxisX.SetVisibilityInPane(false, pane);
         //    }
         //}
     }
 }
Exemple #15
0
        // How to display SecondaryXAxes at bottom pane (pane order seems not to be editable, SecondaryXAxes are not used by Series), see end of AddSeries
        // all curves are displayed in additional panes and at secondary y Axes
        private void addPanes(ChartData <TX, TY> chartData, XYDiagram diagram)
        {
            diagram.PaneDistance         = 10;
            diagram.PaneLayout.Direction = PaneLayoutDirection.Vertical;

            diagram.Panes.Clear();
            foreach (var paneData in chartData.Panes)
            {
                var newPane = new XYDiagramPane(paneData.Id);
                diagram.Panes.Add(newPane);
            }

            if (!chartData.Panes.Any())
            {
                return;
            }

            diagram.DefaultPane.Visibility = ChartElementVisibility.Hidden;
        }
Exemple #16
0
        // How to display SecondaryXAxes at bottom pane (pane order seems not to be editable, SecondaryXAxes are not used by Series), see end of AddSeries
        // all curves are displayed in additional panes and at secondary y Axes
        private void addPanes(ChartData <TX, TY> chartData, XYDiagram diagram)
        {
            diagram.PaneDistance        = 10;
            diagram.PaneLayoutDirection = PaneLayoutDirection.Vertical;

            diagram.Panes.Clear();
            foreach (var paneData in chartData.Panes)
            {
                var newPane = new XYDiagramPane(paneData.Id);
                diagram.Panes.Add(newPane);
            }

            if (!chartData.Panes.Any())
            {
                return;
            }

            diagram.Panes[0].Weight     = 1;
            diagram.DefaultPane.Visible = false;
        }
        public static void InitializeSeparatePaneIndicator(ChartControl chart, SeparatePaneIndicator separatePaneIndicator)
        {
            XYDiagram diagram = chart.Diagram as XYDiagram;

            if (diagram != null)
            {
                XYDiagramPane pane = new XYDiagramPane(separatePaneIndicator.Name + " Pane");
                pane.Tag = separatePaneIndicator.Tag;
                diagram.Panes.Add(pane);
                SecondaryAxisY axisY = new SecondaryAxisY(separatePaneIndicator.Name + " Axis");
                axisY.Tag                            = separatePaneIndicator.Tag;
                axisY.Alignment                      = AxisAlignment.Far;
                axisY.GridLines.Visible              = true;
                axisY.GridLines.MinorVisible         = true;
                axisY.WholeRange.AlwaysShowZeroLevel = false;
                diagram.SecondaryAxesY.Add(axisY);
                separatePaneIndicator.Pane  = pane;
                separatePaneIndicator.AxisY = axisY;
                InitializeNewPaneLegend(chart, separatePaneIndicator);
                UpdateAxisXVisibilityInPanes(diagram);
            }
        }
        private void OnFormLoad(object sender, EventArgs e)
        {
            Series year2003Series = new Series();

            year2003Series.Name = "2003";
            year2003Series.ArgumentDataMember  = "Region";
            year2003Series.ValueDataMembers[0] = "GSP";
            year2003Series.FilterString        = @"[Year] == 2003";

            Series year2004Series = new Series();

            year2004Series.Name = "2004";
            year2004Series.ArgumentDataMember  = "Region";
            year2004Series.ValueDataMembers[0] = "GSP";
            year2004Series.FilterString        = @"[Year] == 2004";

            chartControl.Series.AddRange(year2003Series, year2004Series);

            XYDiagram     diagram    = (XYDiagram)chartControl.Diagram;
            XYDiagramPane secondPane = new XYDiagramPane("Second Pane");

            diagram.Panes.Add(secondPane);

            Legend secondLegend = new Legend("Second Legend")
            {
                DockTarget          = secondPane,
                AlignmentHorizontal = LegendAlignmentHorizontal.Right,
                AlignmentVertical   = LegendAlignmentVertical.Top
            };

            chartControl.Legends.Add(secondLegend);

            XYDiagramSeriesViewBase xyView = (XYDiagramSeriesViewBase)year2004Series.View;

            year2004Series.Legend = secondLegend;
            xyView.Pane           = secondPane;
        }
Exemple #19
0
        public void Draw2PaneDiagram(ChartControl chartControl, DataTable dt, string[] fieldN, string[] seriesN, string axisXN, string title) //将图形分为两个窗格显示
        {
            for (int i = 0; i < fieldN.Count(); i++)
            {
                Series series = new Series(seriesN[i], ViewType.Line);
                series.DataSource         = dt;
                series.ArgumentScaleType  = ScaleType.DateTime;                                                    //x轴参数类型
                series.ArgumentDataMember = axisXN;                                                                //x轴获取指定字段的列
                series.ValueDataMembers.AddRange(fieldN[i]);                                                       //y轴获取指定字段的列
                ((LineSeriesView)series.View).Color = COLORS[i];
                chartControl.Series.Add(series);
            }

            XYDiagram diagram = (XYDiagram)chartControl.Diagram;

            diagram.Panes.Clear();
            XYDiagramPane pane = new XYDiagramPane();

            diagram.Panes.Add(pane);

            for (int i = chartControl.Series.Count / 2; i < chartControl.Series.Count; i++)                     //将另一半折线放入另一窗格中
            {
                XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chartControl.Series[i].View;
                view.Pane = pane;
            }

            diagram.AxisX.SetVisibilityInPane(true, diagram.DefaultPane);                                       //设置默认显示的坐标轴
            diagram.PaneDistance        = 5;
            diagram.PaneLayoutDirection = PaneLayoutDirection.Horizontal;                                       //水平方向放置

            diagram.AxisX.DateTimeScaleOptions.MeasureUnit   = DateTimeMeasureUnit.Hour;                        //最小刻度
            diagram.AxisX.DateTimeScaleOptions.GridAlignment = DateTimeGridAlignment.Day;                       //最小显示刻度

            if (dt.Rows.Count > 0 && !dt.Rows[dt.Rows.Count - 1].IsNull(fieldN[0]))
            {
                int i = 0;
                while (dt.Rows[i].IsNull(fieldN[0]))
                {
                    i++;
                }
                if (Convert.ToInt32(dt.Rows[dt.Rows.Count - 1][fieldN[0]]) - Convert.ToInt32(dt.Rows[i][fieldN[0]]) < 3) //如果两折线的值相差不大,那么缩小y轴范围
                {
                    diagram.AxisY.WholeRange.MinValue = Convert.ToInt32(dt.Rows[i][fieldN[0]]) - 2;                      //y轴起始刻度
                    diagram.AxisY.WholeRange.MaxValue = Convert.ToInt32(dt.Rows[dt.Rows.Count - 1][fieldN[0]]) + 1;
                }
                else
                {
                    diagram.AxisY.WholeRange.MinValue = Convert.ToInt32(dt.Rows[i][fieldN[0]]) - 7;
                    diagram.AxisY.WholeRange.MaxValue = Convert.ToInt32(dt.Rows[dt.Rows.Count - 1][fieldN[0]]) + 5;
                }
            }

            diagram.AxisX.DateTimeOptions.Format       = DateTimeFormat.Custom;
            diagram.AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd HH:mm";

            diagram.AxisX.Title.Visible = true;
            diagram.AxisY.Title.Visible = true;

            if (seriesN[0].Contains("水位"))
            {
                diagram.AxisY.Title.Text = "水位(m)";
            }
            else if (seriesN[0].Contains("流量"))
            {
                diagram.AxisY.Title.Text = "流量(m³/s)";
            }
            else if (seriesN[0].Contains("水量"))
            {
                diagram.AxisY.Title.Text = "水量(m³)";
            }
            diagram.AxisX.Title.Text = "监测时间";

            diagram.AxisY.Title.Alignment = StringAlignment.Far;
            diagram.AxisY.Title.Visible   = true;
            diagram.AxisY.Title.Font      = new Font("宋体", 9.0f);
            diagram.AxisX.Title.Alignment = StringAlignment.Far;
            diagram.AxisX.Title.Visible   = true;
            diagram.AxisX.Title.Font      = new Font("宋体", 9.0f);

            ((XYDiagram)chartControl.Diagram).EnableAxisXZooming   = true;                                         //允许x轴缩放
            ((XYDiagram)chartControl.Diagram).EnableAxisXScrolling = true;                                         //允许x轴移动
            chartControl.CrosshairOptions.ShowArgumentLabels       = true;                                         //移动鼠标时动态显示Y轴数据标签
            chartControl.CrosshairOptions.ShowArgumentLine         = true;                                         //显示Y轴线
            chartControl.CrosshairOptions.ArgumentLineColor        = Color.Blue;
            chartControl.Legend.Visibility          = DevExpress.Utils.DefaultBoolean.True;                        //增加示意图
            chartControl.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Left;

            chartControl.Titles.Add(new ChartTitle());                                                             //增加表名
            chartControl.Titles[0].Text = title;
        }
Exemple #20
0
        void ccHousesSales_BoundDataChanged(object sender, EventArgs e)
        {
            if (ccHousesSales.Series.Count == 0)
            {
                return;
            }
            ccHousesSales.BeginInit();
            try {
                List <string>  seriesNames = new List <string>();
                PaletteEntry[] colors      = ccHousesSales.GetPaletteEntries(10);
                Dictionary <string, XYDiagramPaneBase> panes = new Dictionary <string, XYDiagramPaneBase>();
                foreach (XYDiagramPane pane in Diagram.Panes)
                {
                    pane.Visible = false;
                }
                foreach (SecondaryAxisY axisY in Diagram.SecondaryAxesY)
                {
                    axisY.Visibility             = DefaultBoolean.False;
                    axisY.GridLines.Visible      = false;
                    axisY.GridLines.MinorVisible = false;
                }
                foreach (Series series in ccHousesSales.Series)
                {
                    string[] splittedName = series.Name.TrimEnd().Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    string   name         = splittedName.Length == 3 ? splittedName[2] : "All Regions";
                    string   key          = splittedName[0].Trim() + " (" + splittedName[1].Trim() + ")";
                    if (seriesNames.Contains(name))
                    {
                        ((LineSeriesView)series.View).Color = colors[seriesNames.IndexOf(name)].Color;
                        series.ShowInLegend = false;
                    }
                    else
                    {
                        seriesNames.Add(name);
                        ((LineSeriesView)series.View).Color = colors[seriesNames.Count - 1].Color;
                    }
                    series.Name = name;

                    if (panes.Keys.Count == 0)
                    {
                        panes.Add(key, Diagram.DefaultPane);
                        ((TextAnnotation)ccHousesSales.Annotations[0]).Text = key;
                    }
                    else if (panes.ContainsKey(key))
                    {
                        XYDiagramPaneBase currentPane = panes[key];
                        UptadeSeries(series, currentPane, GetAxisY(currentPane));
                    }
                    else
                    {
                        int paneIndex;
                        for (paneIndex = 0; paneIndex < Diagram.Panes.Count; paneIndex++)
                        {
                            if (!panes.ContainsValue(Diagram.Panes[paneIndex]))
                            {
                                break;
                            }
                        }
                        XYDiagramPane pane = Diagram.Panes[paneIndex];
                        pane.Visible = true;
                        panes.Add(key, pane);
                        SecondaryAxisY axis = Diagram.SecondaryAxesY[paneIndex];
                        axis.GridLines.Visible      = true;
                        axis.GridLines.MinorVisible = true;
                        axis.Visibility             = DefaultBoolean.True;
                        UptadeSeries(series, pane, axis);
                        ((TextAnnotation)ccHousesSales.Annotations[paneIndex + 1]).Text = key;
                    }
                }
            }
            finally {
                ccHousesSales.EndInit();
            }
        }
Exemple #21
0
        public override void SetupXtraChartSeries(ChartContext chartContext, Series series)
        {
            base.SetupXtraChartSeries(chartContext, series);

            if (series.View is XYDiagram2DSeriesViewBase view)
            {
                if (view is SwiftPlotSeriesView swiftView)
                {
                    swiftView.Antialiasing = true;
                }

                if (AggregateFunction != SCSeriesAggregateFunction.Default)
                {
                    view.AggregateFunction = (SeriesAggregateFunction)(int)AggregateFunction;
                }

                var color = Utils.ColorFromString(Color);
                if (color != System.Drawing.Color.Empty)
                {
                    view.Color = color;
                }

                if (chartContext.Chart.Diagram is XYDiagram2D diagram)
                {
                    XYDiagramPane pane = null;
                    Axis2D        axisX = null, axisY = null;
                    if (!string.IsNullOrWhiteSpace(Pane))
                    {
                        pane = diagram.Panes[Pane];
                        if (pane == null)
                        {
                            throw new Exception("Invalid pane name.");
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(AxisX))
                    {
                        axisX = diagram.FindAxisXByName(AxisX);
                        if (axisX == null)
                        {
                            throw new Exception("Invalid axis X name.");
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(AxisY))
                    {
                        axisY = diagram.FindAxisYByName(AxisY);
                        if (axisY == null)
                        {
                            throw new Exception("Invalid axis Y name.");
                        }
                    }

                    switch (view)
                    {
                    case XYDiagramSeriesViewBase viewBase:
                        if (pane != null)
                        {
                            viewBase.Pane = pane;
                        }
                        if (axisX != null)
                        {
                            viewBase.AxisX = axisX as AxisXBase;
                        }
                        if (axisY != null)
                        {
                            viewBase.AxisY = axisY as AxisYBase;
                        }
                        break;

                    case SwiftPlotSeriesViewBase viewSwift:
                        if (pane != null)
                        {
                            viewSwift.Pane = pane;
                        }
                        if (axisX != null)
                        {
                            viewSwift.AxisX = axisX as SwiftPlotDiagramAxisXBase;
                        }
                        if (axisY != null)
                        {
                            viewSwift.AxisY = axisY as SwiftPlotDiagramAxisYBase;
                        }
                        break;
                    }
                }
            }
        }
Exemple #22
0
        private void InitChartControl()
        {
            //Series series1 = new Series("1", ViewType.Line);
            //for (int rowIdx = 0; rowIdx < 10; rowIdx++)
            //{
            //    series1.Points.Add(new SeriesPoint(rowIdx, rowIdx));
            //}

            //Series series2 = new Series("1", ViewType.Line);
            //for (int rowIdx = 0; rowIdx < 10; rowIdx++)
            //{
            //    series2.Points.Add(new SeriesPoint(rowIdx, rowIdx + 10));
            //}

            //Series series3 = new Series("1", ViewType.Line);
            //for (int rowIdx = 0; rowIdx < 10; rowIdx++)
            //{
            //    series3.Points.Add(new SeriesPoint(rowIdx, rowIdx + 20));
            //}

            XYDiagram        xyDiagram1        = new XYDiagram();
            var              xyDiagramPane1    = new XYDiagramPane();
            SecondaryAxisY   secondaryAxisY1   = new SecondaryAxisY();
            Series           series1           = new Series();
            PointSeriesLabel pointSeriesLabel1 = new PointSeriesLabel();
            SeriesPoint      seriesPoint1      = new SeriesPoint(new DateTime(2008, 6, 11, 6, 0, 0, 0), new object[] {
                ((object)(56.48D))
            });
            SeriesPoint seriesPoint2 = new SeriesPoint(new DateTime(2008, 6, 11, 3, 0, 0, 0), new object[] {
                ((object)(53.78D))
            });
            LineSeriesView   lineSeriesView1   = new LineSeriesView();
            Series           series2           = new Series();
            PointSeriesLabel pointSeriesLabel2 = new PointSeriesLabel();
            SeriesPoint      seriesPoint3      = new SeriesPoint(new DateTime(2008, 6, 11, 6, 0, 0, 0), new object[] {
                ((object)(1023D))
            });
            SeriesPoint seriesPoint4 = new SeriesPoint(new System.DateTime(2008, 6, 11, 3, 0, 0, 0), new object[] {
                ((object)(1021D))
            });
            AreaSeriesView areaSeriesView1 = new AreaSeriesView();
            ChartTitle     chartTitle1     = new ChartTitle();

            ((ISupportInitialize)(chartControl4)).BeginInit();
            ((ISupportInitialize)(xyDiagram1)).BeginInit();
            ((ISupportInitialize)(xyDiagramPane1)).BeginInit();
            ((ISupportInitialize)(secondaryAxisY1)).BeginInit();
            ((ISupportInitialize)(series1)).BeginInit();
            ((ISupportInitialize)(pointSeriesLabel1)).BeginInit();
            ((ISupportInitialize)(lineSeriesView1)).BeginInit();
            ((ISupportInitialize)(series2)).BeginInit();
            ((ISupportInitialize)(pointSeriesLabel2)).BeginInit();
            ((ISupportInitialize)(areaSeriesView1)).BeginInit();
            this.SuspendLayout();


            chartControl4.AutoLayout = false;
            chartControl4.CrosshairOptions.ArgumentLineColor           = System.Drawing.Color.DeepSkyBlue;
            chartControl4.CrosshairOptions.ArgumentLineStyle.Thickness = 2;
            chartControl4.CrosshairOptions.GroupHeaderPattern          = "{A:d MMMM,  H:mm}";
            chartControl4.CrosshairOptions.ShowOnlyInFocusedPane       = false;
            chartControl4.DataBindings = null;


            xyDiagram1.AxisX.DateTimeScaleOptions.AutoGrid      = false;
            xyDiagram1.AxisX.DateTimeScaleOptions.GridAlignment = DevExpress.XtraCharts.DateTimeGridAlignment.Hour;
            xyDiagram1.AxisX.DateTimeScaleOptions.GridSpacing   = 6D;
            xyDiagram1.AxisX.DateTimeScaleOptions.MeasureUnit   = DevExpress.XtraCharts.DateTimeMeasureUnit.Hour;
            xyDiagram1.AxisX.GridLines.Visible                            = true;
            xyDiagram1.AxisX.Interlaced                                   = true;
            xyDiagram1.AxisX.Label.Staggered                              = true;
            xyDiagram1.AxisX.Label.TextPattern                            = "{A:dd/MM HH:mm}";
            xyDiagram1.AxisX.Title.Text                                   = "Date";
            xyDiagram1.AxisX.VisibleInPanesSerializable                   = "";
            xyDiagram1.AxisX.VisualRange.Auto                             = false;
            xyDiagram1.AxisX.VisualRange.MaxValueSerializable             = "06/11/2008 06:00:00.000";
            xyDiagram1.AxisX.VisualRange.MinValueSerializable             = "06/11/2008 03:00:00.000";
            xyDiagram1.AxisY.GridLines.MinorVisible                       = true;
            xyDiagram1.AxisY.Title.Font                                   = new System.Drawing.Font("Tahoma", 10F);
            xyDiagram1.AxisY.Title.Text                                   = "Temperature, F";
            xyDiagram1.AxisY.Title.Visibility                             = DevExpress.Utils.DefaultBoolean.True;
            xyDiagram1.AxisY.VisibleInPanesSerializable                   = "-1";
            xyDiagram1.AxisY.WholeRange.AlwaysShowZeroLevel               = false;
            xyDiagram1.DefaultPane.ScrollBarOptions.XAxisScrollBarVisible = false;
            xyDiagram1.DefaultPane.ScrollBarOptions.YAxisScrollBarVisible = false;
            xyDiagram1.DefaultPane.Weight                                 = 2D;
            xyDiagram1.EnableAxisXScrolling                               = true;
            xyDiagram1.PaneDistance = 4;
            xyDiagramPane1.Name     = "Pane 1";
            xyDiagramPane1.PaneID   = 0;
            xyDiagramPane1.ScrollBarOptions.XAxisScrollBarVisible = false;
            xyDiagramPane1.ScrollBarOptions.YAxisScrollBarVisible = false;
            xyDiagram1.Panes.AddRange(new DevExpress.XtraCharts.XYDiagramPane[] {
                xyDiagramPane1
            });


            secondaryAxisY1.Alignment = DevExpress.XtraCharts.AxisAlignment.Near;
            secondaryAxisY1.AxisID    = 0;
            secondaryAxisY1.GridLines.MinorVisible = true;
            secondaryAxisY1.GridLines.Visible      = true;
            secondaryAxisY1.Name = "secondaryAxisY1";
            secondaryAxisY1.NumericScaleOptions.AutoGrid    = false;
            secondaryAxisY1.NumericScaleOptions.GridSpacing = 4D;
            secondaryAxisY1.Title.Font                       = new System.Drawing.Font("Tahoma", 10F);
            secondaryAxisY1.Title.Text                       = "Pressure, mbar";
            secondaryAxisY1.Title.Visibility                 = DevExpress.Utils.DefaultBoolean.True;
            secondaryAxisY1.VisibleInPanesSerializable       = "0";
            secondaryAxisY1.VisualRange.Auto                 = false;
            secondaryAxisY1.VisualRange.AutoSideMargins      = false;
            secondaryAxisY1.VisualRange.MaxValueSerializable = "1025";
            secondaryAxisY1.VisualRange.MinValueSerializable = "1014";
            secondaryAxisY1.VisualRange.SideMarginsValue     = 0D;
            secondaryAxisY1.WholeRange.AlwaysShowZeroLevel   = false;
            secondaryAxisY1.WholeRange.Auto                  = false;
            secondaryAxisY1.WholeRange.AutoSideMargins       = false;
            secondaryAxisY1.WholeRange.MaxValueSerializable  = "1025";
            secondaryAxisY1.WholeRange.MinValueSerializable  = "1014";
            secondaryAxisY1.WholeRange.SideMarginsValue      = 0D;
            xyDiagram1.SecondaryAxesY.AddRange(new DevExpress.XtraCharts.SecondaryAxisY[] {
                secondaryAxisY1
            });



            chartControl4.Diagram = xyDiagram1;
            chartControl4.Dock    = System.Windows.Forms.DockStyle.Fill;
            chartControl4.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Left;
            chartControl4.Legend.AlignmentVertical   = DevExpress.XtraCharts.LegendAlignmentVertical.BottomOutside;
            chartControl4.Legend.Direction           = DevExpress.XtraCharts.LegendDirection.LeftToRight;
            chartControl4.Legend.Name = "Default Legend";
            chartControl4.Location    = new System.Drawing.Point(0, 0);
            chartControl4.Name        = "chart04";


            series1.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.DateTime;
            pointSeriesLabel1.Angle   = 90;
            series1.Label             = pointSeriesLabel1;
            series1.Name = "Temperature (F)";
            series1.Points.AddRange(new DevExpress.XtraCharts.SeriesPoint[] {
                seriesPoint1,
                seriesPoint2
            });
            series1.View = lineSeriesView1;
            series2.ArgumentScaleType    = DevExpress.XtraCharts.ScaleType.DateTime;
            pointSeriesLabel2.Angle      = 90;
            pointSeriesLabel2.LineLength = 5;
            series2.Label            = pointSeriesLabel2;
            series2.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
            series2.Name             = "Pressure (mbar)";
            series2.Points.AddRange(new DevExpress.XtraCharts.SeriesPoint[] {
                seriesPoint3,
                seriesPoint4
            });
            areaSeriesView1.AxisYName        = "secondaryAxisY1";
            areaSeriesView1.MarkerVisibility = DevExpress.Utils.DefaultBoolean.False;
            areaSeriesView1.PaneName         = "Pane 1";
            areaSeriesView1.Transparency     = ((byte)(0));
            series2.View = areaSeriesView1;

            this.chartControl4.SeriesSerializable = new DevExpress.XtraCharts.Series[] {
                series1,
                series2
            };
            chartControl4.Size     = new System.Drawing.Size(1333, 548);
            chartControl4.TabIndex = 3;
            chartTitle1.Text       = "Weather in London";
            chartControl4.Titles.AddRange(new DevExpress.XtraCharts.ChartTitle[] {
                chartTitle1
            });
            chartControl4.ToolTipOptions.ShowForPoints = false;


            ((ISupportInitialize)(xyDiagramPane1)).EndInit();
            ((ISupportInitialize)(secondaryAxisY1)).EndInit();
            ((ISupportInitialize)(xyDiagram1)).EndInit();
            ((ISupportInitialize)(pointSeriesLabel1)).EndInit();
            ((ISupportInitialize)(lineSeriesView1)).EndInit();
            ((ISupportInitialize)(series1)).EndInit();
            ((ISupportInitialize)(pointSeriesLabel2)).EndInit();
            ((ISupportInitialize)(areaSeriesView1)).EndInit();
            ((ISupportInitialize)(series2)).EndInit();
            ((ISupportInitialize)(this.chartControl4)).EndInit();
            this.ResumeLayout(false);
        }
Exemple #23
0
        //Given a list of subsets are passed in, these are displayed in a panes
        public void CreateHistogram_withPanes(List <DataSubset> subsets, string mysubtitle, string var)        //, Color mycolor)
        {
            List <HistBinsData> list_o_histdata = new List <HistBinsData>();
            List <string>       subtitle1       = new List <string>();
            string panelvar = "";

            //Create a series for each subset
            for (int i = 0; i < subsets.Count; i++)
            {
                DataSubset   subset   = subsets[i];
                HistBinsData histdata = new HistBinsData(subset.dt, var, _settings.numbins);
                if (histdata.N > 0)
                {
                    if (panelvar == "")
                    {
                        panelvar = subset.Cols_ToString();
                    }
                    list_o_histdata.Add(histdata);
                    subtitle1.Add(subset.Vals_ToString());
                }
            }

            //Panes
            this.AddPanes((list_o_histdata.Count - 1), _settings.panesLayoutDirection);

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

            //Create a series for each subset
            for (int i = 0; i < list_o_histdata.Count; i++)
            {
                HistBinsData histdata = list_o_histdata[i];

                if (histdata.N > 0)
                {
                    Color          mypanelcolor = _settings.color(i);
                    Series         s            = CreateHistogramSeries(histdata.bins, mypanelcolor, false);
                    AreaSeriesView vw           = (AreaSeriesView)s.View;

                    if (i >= 1)
                    {
                        vw.Pane = this.xydiagram.Panes[(i - 1)];                          //Panes collection starts at index 0, but first series goes into default pane
                    }
                    chart.Series.Add(s);

                    //Normal Curve
                    if (_settings.shownormalcurve & histdata.normalX != null)
                    {
                        Series          s_nc  = CreateNormalCurveSeries(histdata.normalX, histdata.normalY, mypanelcolor, false);
                        PointSeriesView vw_nc = (PointSeriesView)s_nc.View;
                        if (i >= 1)
                        {
                            vw_nc.Pane = this.xydiagram.Panes[(i - 1)];
                        }
                        chart.Series.Add(s_nc);
                    }
                    //M SD
                    if (_settings.histMSD)
                    {
                        Series          s_msd  = CreateMSDSeries(histdata.mean, histdata.sd, 0, mypanelcolor, false);
                        PointSeriesView vw_msd = (PointSeriesView)s_msd.View;
                        if (i >= 1)
                        {
                            vw_msd.Pane = this.xydiagram.Panes[(i - 1)];
                        }
                        chart.Series.Add(s_msd);
                    }

                    string newline = Environment.NewLine;

                    string subtitle_text = String.Format("<color={0}><b>{1}</b> N={2} M={3} SD={4}</color>{5}",
                                                         ColorTranslator.ToHtml(mypanelcolor)
                                                         , subtitle1[i]
                                                         , histdata.N, Math.Round(histdata.mean, 2), Math.Round(histdata.sd, 2), newline);


                    subtitles.Add(subtitle_text);
                }
            }

            string subtitles_merged = String.Join(" ", subtitles);

            //this.AddTitles(String.Format("Histogram <b>{0}{1}* by {2} *</b>"
            //	, var
            //	, Environment.NewLine
            //	, panelvar), subtitles_merged, "", "Count");


            string maintitle = String.Format("Histogram <b>{0}{1}* by {2} *</b>"
                                             , var
                                             , Environment.NewLine
                                             , panelvar);

            this.AddTitles(maintitle);

            XYDiagramDefaultPane defpane = xydiagram.DefaultPane;

            defpane.Title.Text       = subtitles[0];
            defpane.Title.Visibility = DefaultBoolean.True;

            for (int p = 0; p < xydiagram.Panes.Count; p++)
            {
                XYDiagramPane pane = xydiagram.Panes[p];
                pane.Title.Text = subtitles[p + 1];
            }

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

            chart.BorderOptions.Color = Color.White;
            chart.Legend.Visibility   = DevExpress.Utils.DefaultBoolean.True;
        }
Exemple #24
0
        public void CreateBarchart(DescStats statstable)         //, string xaxisvar, string colorsvar, string maintitle )
        {
            chart.AxisWholeRangeChanged += LogAxesRangeWhole;
            //chart.AxisVisualRangeChanged += LogAxesRangeVisual;


            string mycolorvar;

            if (_settings.colorvar == "none")
            {
                mycolorvar = (statstable.dt.ColumnNames().Contains("All")) ? "All" : _settings.xaxisvar;
            }
            else
            {
                mycolorvar = _settings.colorvar;
            }



            List <string> colors_levels = statstable.dt.AsEnumerable().Select(x => x.Field <string>(mycolorvar)).Distinct().ToList();
            List <string> xaxis_levels  = statstable.dt.AsEnumerable().Select(x => x.Field <string>(_settings.xaxisvar)).Distinct().ToList();
            List <string> panes_levels  = new List <string>();

            if (_settings.panelvar != "none")
            {
                panes_levels = statstable.dt.AsEnumerable().Select(x => x.Field <string>(_settings.panelvar)).Distinct().ToList();
                panes_levels.Sort();
            }


            //for (int i = 0; i < colors_levels.Count; i++)
            //{
            //	string current_color_lev = colors_levels[i];
            //}


            foreach (Series ser in chart.Series)
            {
                Debug.WriteLine(String.Format("arg data member:[{0}] color data member:[{1}]", ser.ArgumentDataMember, ser.ColorDataMember));
            }


            BarchartSeries barseries = new BarchartSeries(statstable.dt, _settings.xaxisvar, _settings.colorvar, _settings.panelvar, _settings.colors, colors_levels);

            foreach (DxSeriesPoints sp in barseries.list_dxseriespoints)
            {
                Series s = new Series();
                s.Points.AddRange(sp.seriesPoints);
                SideBySideBarSeriesView vw = new SideBySideBarSeriesView();
                s.View = vw;

                var thesd = sp.seriesPointsSD[0].Values[0];

                vw.Indicators.Add(new FixedValueErrorBars
                {
                    Direction     = ErrorBarDirection.Both,
                    Name          = "SD",
                    Color         = Color.Black,
                    PositiveError = thesd,
                    NegativeError = thesd
                });

                chart.Series.Add(s);
            }

            Debug.WriteLine(String.Format("***************************** INIT   # of Panes: {0}", xydiagram.Panes.Count));


            //Additional Panes
            if (panes_levels.Count > 0)
            {
                xydiagram.Panes.Clear();
                Debug.WriteLine(String.Format("***************************** After CLEAR # of Panes: {0}", xydiagram.Panes.Count));
                foreach (string p in panes_levels)
                {
                    // Obtain a diagram and clear its collection of panes.
                    XYDiagramPane pane = new XYDiagramPane(p);
                    xydiagram.Panes.Add(pane);
                    pane.Title.Text                = p;
                    pane.Title.Visibility          = DefaultBoolean.True;
                    xydiagram.PaneLayout.Direction = _settings.panesLayoutDirection;                     // PaneLayoutDirection.Horizontal;
                    Debug.WriteLine(String.Format("**********************************   # of Panes: {0} {1}", xydiagram.Panes.Count, p));

                    // check whether series should be added to this pane.
                    for (int i = 0; i < chart.Series.Count; i++)
                    {
                        // if (sps[i].panename == p)
                        if (barseries.list_dxseriespoints[i].panename == p)
                        {
                            XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chart.Series[i].View;
                            view.Pane = xydiagram.Panes[p];
                        }
                    }

                    xydiagram.DefaultPane.Visibility = ChartElementVisibility.Hidden;
                }
            }
            //No Additional Panes
            else
            {
                for (int i = 0; i < chart.Series.Count; i++)
                {
                    XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chart.Series[i].View;
                    view.Pane = xydiagram.DefaultPane;
                }
            }

            chart.DataBind();


            //Adjust axis range if needed
            if (_settings.miny != -999 && _settings.maxy != -999)
            {
                double y1 = _settings.miny;
                double y2 = _settings.maxy;
                //diag.AxisY.VisualRange.SetMinMaxValues(y1, y2);
                xydiagram.AxisY.WholeRange.SetMinMaxValues(y1, y2);
                xydiagram.AxisY.VisualRange.SetMinMaxValues(y1, y2);
            }


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

            #region Titles
            if (_settings.numvars.Count == 1)
            {
                AddTitles(_settings.title, _settings.subtitle, "", String.Format("{0} Mean (SD)", _settings.numvars[0]));
            }
            else
            {
                AddTitles(_settings.title, _settings.subtitle, "", "Mean (SD)");
            }
            #endregion

            chart.BorderOptions.Color = Color.White;


            this.LegendByColorLevels(_settings.colors, colors_levels);

            chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True;
        }
        private void ConfigureIndicatorCharts(ChartSettings chartSettings)
        {
            var indicatorSeriesSettingsSet = new List <IndicatorSeriesColorSettings>();
            var indicatorAddtionalPanels   = IndicatorPanelSettings.GetAdditionalPanelsSettings(chartSettings.Period);

            //Build Series
            var viewSettingsByIndicatorType = IndicatorSeriesViewSettings.GetIndicatorSeriesViewSettings(chartSettings)
                                              .GroupBy(viewSettings => new { viewSettings.IndicatorType, viewSettings.CandlePeriod });

            foreach (var seriesViewSettings in viewSettingsByIndicatorType)
            {
                var indicatorSerieses = new List <Series>();
                var seriesViews       = new List <SeriesViewColorEachSupportBase>();

                foreach (var viewSettings in seriesViewSettings)
                {
                    SeriesViewColorEachSupportBase seriesView;

                    switch (viewSettings.ViewType)
                    {
                    case ViewType.Line:
                        seriesView = new LineSeriesView();
                        break;

                    case ViewType.Bar:
                        seriesView = new StackedBarSeriesView();
                        break;

                    case ViewType.Point:
                        seriesView = new PointSeriesView();
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(viewSettings.ViewType));
                    }

                    var seriesSettings = new IndicatorSeriesColorSettings
                    {
                        IndicatorType = seriesViewSettings.Key.IndicatorType,
                        CandlePeriod  = seriesViewSettings.Key.CandlePeriod,
                    };
                    var availableColors = IndicatorSeriesColorSettings.AvailableSeriesColors
                                          .Where(color => indicatorSeriesSettingsSet
                                                 .Where(s => s.IndicatorType == seriesViewSettings.Key.IndicatorType && s.CandlePeriod == seriesViewSettings.Key.CandlePeriod)
                                                 .All(s => s.SeriesColor != color))
                                          .ToList();
                    seriesSettings.SeriesColor = availableColors.Any() ? availableColors.First() : IndicatorSeriesColorSettings.LastDefaultColor;
                    indicatorSeriesSettingsSet.Add(seriesSettings);

                    seriesView.Color = seriesSettings.SeriesColor;
                    seriesViews.Add(seriesView);

                    var indicatorSeries = new Series(viewSettings.IndicatorValue, viewSettings.ViewType);
                    indicatorSeries.ArgumentScaleType  = ScaleType.DateTime;
                    indicatorSeries.LabelsVisibility   = DevExpress.Utils.DefaultBoolean.False;
                    indicatorSeries.ArgumentDataMember = "Moment";
                    indicatorSeries.ValueDataMembers.AddRange(viewSettings.IndicatorValue);
                    indicatorSeries.View = seriesView;
                    indicatorSerieses.Add(indicatorSeries);
                }

                var panelSettings =
                    indicatorAddtionalPanels.FirstOrDefault(s =>
                                                            s.AssignedIndicators.Any(tuple => tuple.Item1 == seriesViewSettings.Key.IndicatorType && tuple.Item2 == seriesViewSettings.Key.CandlePeriod));
                if (panelSettings != null)
                {
                    if (panelSettings.Panel == null || panelSettings.AxisY == null)
                    {
                        var pane = new XYDiagramPane();
                        ((XYDiagram)chartControl.Diagram).Panes.Add(pane);
                        panelSettings.Panel = pane;

                        var axisY = new SecondaryAxisY();
                        ((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(axisY);
                        panelSettings.AxisY = axisY;
                    }
                    foreach (var seriesView in seriesViews)
                    {
                        seriesView.Pane  = panelSettings.Panel;
                        seriesView.AxisY = panelSettings.AxisY;
                    }
                }
                else
                {
                    foreach (var seriesView in seriesViews)
                    {
                        seriesView.Pane  = ((XYDiagram)chartControl.Diagram).DefaultPane;
                        seriesView.AxisY = ((XYDiagram)chartControl.Diagram).AxisY;
                    }
                }

                chartControl.Series.AddRange(indicatorSerieses.ToArray());
            }
        }
        private void Form2_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
            //设置行号列宽度
            this.gridView1.IndicatorWidth = 40;
            DataTable datatable = DataBusiness.sql_PY.Get();

            gridControl1.DataSource = datatable;
            // this.gridView1.Columns["Well_Num"].Visible = false;
            refresh();
            #region 绘图

            //新建线
            Series series1 = new Series("压力", ViewType.Point);
            Series series2 = new Series("产量", ViewType.Line);

            #region 设置series的样式
            //设置series的样式
            PointSeriesView view1 = (PointSeriesView)series1.View;
            view1.Color = Color.Red;           //颜色
            view1.PointMarkerOptions.Size = 3; //大小
            // view1.PointMarkerOptions.Kind = Kind.Plus;//样式

            LineSeriesView view2 = (LineSeriesView)series2.View;
            view2.Color = Color.Green;
            #endregion

            #region 描点
            //描点
            for (int i = 0; i < datatable.Rows.Count; i++)
            {
                series1.Points.Add(new SeriesPoint(datatable.Rows[i][0], datatable.Rows[i][1]));
            }
            this.chartControl1.Series.Add(series1);

            for (int i = 0; i < datatable.Rows.Count; i++)
            {
                series2.Points.Add(new SeriesPoint(datatable.Rows[i][0], datatable.Rows[i][2]));
            }
            this.chartControl1.Series.Add(series2);
            #endregion

            XYDiagram diagram = chartControl1.Diagram as XYDiagram;

            //设置X滚动轴
            ((XYDiagram)this.chartControl1.Diagram).EnableAxisXZooming   = true;
            ((XYDiagram)this.chartControl1.Diagram).EnableAxisXScrolling = true;

            //新建pane
            XYDiagramPane Pane1 = new XYDiagramPane("per");
            diagram.Panes.Add(Pane1);


            diagram.AxisY.Alignment = AxisAlignment.Far;

            //翻转pane,即纵坐标为深度
            //  diagram.Rotated = true;
            //将两个pane横着排列
            // diagram.PaneLayoutDirection = PaneLayoutDirection.Horizontal;

            //将seeies放在Pane1里
            view2.Pane = Pane1;

            #region Pane1的坐标轴
            //设置Pane1的坐标轴,只设置Y轴
            diagram.SecondaryAxesY.Add(new SecondaryAxisY("PaneY"));
            diagram.SecondaryAxesY[0].Alignment         = AxisAlignment.Near;
            diagram.SecondaryAxesY[0].GridLines.Visible = true;

            diagram.SecondaryAxesY[0].Title.Visible   = true;
            diagram.SecondaryAxesY[0].Title.Alignment = StringAlignment.Center;
            diagram.SecondaryAxesY[0].Title.Text      = "产量";



            //这里只用Y轴,让X轴保持一样,才能同步变化
            view2.AxisY = diagram.SecondaryAxesY[0];
            #endregion

            //设置title
            //this.chartControl1.Titles.Add(new ChartTitle());
            //this.chartControl1.Titles[0].Text = "图";

            #region Pane1的坐标轴
            //设置defauPane的坐标轴
            diagram.AxisY.Alignment       = AxisAlignment.Near;
            diagram.AxisY.Title.Visible   = true;
            diagram.AxisY.Title.Alignment = StringAlignment.Center;
            diagram.AxisY.Title.Text      = "压力";

            diagram.AxisX.Title.Visible   = true;
            diagram.AxisX.Title.Alignment = StringAlignment.Center;
            diagram.AxisX.Title.Text      = "时间(小时)";
            #endregion

            #endregion
        }
        private void OnPaneCheckedChanged(object sender, ItemClickEventArgs e)
        {
            XYDiagramPane item = (XYDiagramPane)e.Item.Tag;

            item.Visibility = ((BarCheckItem)e.Item).Checked ? ChartElementVisibility.Visible : ChartElementVisibility.Hidden;
        }
Exemple #28
0
        protected virtual void SetupXtraChartAnnotation(TextAnnotation annotation)
        {
            AnchorDockPane = Pane ?? AnchorDockPane;

            //Need this to link annotation to series point in BoundDataChanged
            annotation.Tag = this;

            if (!string.IsNullOrWhiteSpace(Name))
            {
                annotation.Name = Name;
            }

            annotation.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;

            if (Angle.HasValue)
            {
                annotation.Angle = Angle.Value;
            }

            var backColor = Utils.ColorFromString(BackColor);

            if (backColor != Color.Empty)
            {
                annotation.BackColor = backColor;
            }

            var borderColor = Utils.ColorFromString(BorderColor);

            if (borderColor != Color.Empty)
            {
                annotation.Border.Color      = borderColor;
                annotation.Border.Visibility = DevExpress.Utils.DefaultBoolean.True;
            }
            if (BorderThickness.HasValue)
            {
                annotation.Border.Thickness  = BorderThickness.Value;
                annotation.Border.Visibility = DevExpress.Utils.DefaultBoolean.True;
            }
            if (BorderVisible.HasValue)
            {
                annotation.Border.Visibility = BorderVisible.Value ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.Default;
            }

            if (FillMode.HasValue)
            {
                annotation.FillStyle.FillMode = FillMode.Value;
                switch (FillMode.Value)
                {
                case DevExpress.XtraCharts.FillMode.Empty:
                    break;

                case DevExpress.XtraCharts.FillMode.Solid:
                    break;

                case DevExpress.XtraCharts.FillMode.Gradient:
                    if (annotation.FillStyle.Options is RectangleGradientFillOptions gradientOptions)
                    {
                        var backColor2 = Utils.ColorFromString(BackColor2);
                        if (backColor2 != System.Drawing.Color.Empty)
                        {
                            gradientOptions.Color2 = backColor2;
                        }
                        if (FillGradientMode.HasValue)
                        {
                            gradientOptions.GradientMode = FillGradientMode.Value;
                        }
                    }
                    break;

                case DevExpress.XtraCharts.FillMode.Hatch:
                    if (annotation.FillStyle.Options is HatchFillOptions hatchOptions)
                    {
                        var backColor2 = Utils.ColorFromString(BackColor2);
                        if (backColor2 != System.Drawing.Color.Empty)
                        {
                            hatchOptions.Color2 = backColor2;
                        }
                        if (FillHatchStyle.HasValue)
                        {
                            hatchOptions.HatchStyle = FillHatchStyle.Value;
                        }
                    }
                    break;
                }
            }

            var font = Utils.StringToFont(Font, out Color textColor);

            if (font != null)
            {
                annotation.Font = font;
            }
            if (textColor != Color.Empty)
            {
                annotation.TextColor = textColor;
            }

            if (ConnectorStyle.HasValue)
            {
                annotation.ConnectorStyle = ConnectorStyle.Value;
            }

            if (Width.HasValue)
            {
                annotation.Width    = Width.Value;
                annotation.AutoSize = false;
            }
            if (Height.HasValue)
            {
                annotation.Height   = Height.Value;
                annotation.AutoSize = false;
            }

            if (Padding != null && Padding.Length == 1)
            {
                annotation.Padding.All = Padding[0];
            }
            else if (Padding != null && Padding.Length == 4)
            {
                annotation.Padding.Left   = Padding[0];
                annotation.Padding.Top    = Padding[1];
                annotation.Padding.Right  = Padding[2];
                annotation.Padding.Bottom = Padding[3];
            }
            else if (Padding != null)
            {
                throw new Exception("Invalid padding. Padding shall be an array with 1 or 4 integer values.");
            }

            var shadowColor = Utils.ColorFromString(ShadowColor);

            if (shadowColor != Color.Empty)
            {
                annotation.Shadow.Color   = shadowColor;
                annotation.Shadow.Visible = true;
            }
            if (ShadowSize.HasValue)
            {
                annotation.Shadow.Size    = ShadowSize.Value;
                annotation.Shadow.Visible = true;
            }

            if (ShapeFillet.HasValue)
            {
                annotation.ShapeFillet = ShapeFillet.Value;
            }
            if (ShapeKind.HasValue)
            {
                annotation.ShapeKind = ShapeKind.Value;
            }

            annotation.LabelMode = LabelMode;

            if (AnchorAngle.HasValue || AnchorConnectorLength.HasValue)
            {
                annotation.ShapePosition = new RelativePosition(AnchorAngle ?? 0.0, AnchorConnectorLength ?? 0.0);
            }
            else if (AnchorDockCorner.HasValue)
            {
                XYDiagramPane pane = null;
                if (!string.IsNullOrWhiteSpace(AnchorDockPane))
                {
                    if (ChartContext.Chart.Diagram is not XYDiagram2D diagramXY)
                    {
                        throw new Exception("Panes are available only in 2D XY charts.");
                    }

                    pane = diagramXY.Panes[AnchorDockPane];
                    if (pane == null)
                    {
                        throw new Exception($"Cannot find pane '{AnchorDockPane}'.");
                    }
                }

                var freePosition = new FreePosition();
                if (pane != null)
                {
                    freePosition.DockTarget = pane;
                }
                freePosition.DockCorner = AnchorDockCorner.Value;

                if (DockInnerIndents != null && DockInnerIndents.Length == 1)
                {
                    freePosition.InnerIndents.All = DockInnerIndents[0];
                }
                else if (DockInnerIndents != null && DockInnerIndents.Length == 4)
                {
                    freePosition.InnerIndents.Left   = DockInnerIndents[0];
                    freePosition.InnerIndents.Top    = DockInnerIndents[1];
                    freePosition.InnerIndents.Right  = DockInnerIndents[2];
                    freePosition.InnerIndents.Bottom = DockInnerIndents[3];
                }

                if (DockOuterIndents != null && DockOuterIndents.Length == 1)
                {
                    freePosition.OuterIndents.All = DockOuterIndents[0];
                }
                else if (DockOuterIndents != null && DockOuterIndents.Length == 4)
                {
                    freePosition.OuterIndents.Left   = DockOuterIndents[0];
                    freePosition.OuterIndents.Top    = DockOuterIndents[1];
                    freePosition.OuterIndents.Right  = DockOuterIndents[2];
                    freePosition.OuterIndents.Bottom = DockOuterIndents[3];
                }

                annotation.ShapePosition = freePosition;
            }

            annotation.Text    = Text;
            annotation.Visible = true;
            if (TextAlignment.HasValue)
            {
                annotation.TextAlignment = TextAlignment.Value;
            }
            if (ZOrder.HasValue)
            {
                annotation.ZOrder = ZOrder.Value;
            }

            switch (ParameterSetName)
            {
            case "Chart":
                annotation.AnchorPoint = new ChartAnchorPoint(X, Y);
                break;

            case "Pane":
                if (ChartContext.Chart.Diagram is not XYDiagram diagramXY)
                {
                    throw new Exception("Panes are available only in 2D XY charts.");
                }

                var anchor = new PaneAnchorPoint();

                if (!string.IsNullOrWhiteSpace(AnchorDockPane))
                {
                    var pane = diagramXY.Panes[AnchorDockPane];
                    anchor.Pane = pane ?? throw new Exception($"Cannot find pane '{AnchorDockPane}'.");
                }

                var axisX = !string.IsNullOrWhiteSpace(AxisX) ? diagramXY.FindAxisXByName(AxisX) : diagramXY.AxisX;
                var axisY = !string.IsNullOrWhiteSpace(AxisY) ? diagramXY.FindAxisYByName(AxisY) : diagramXY.AxisY;

                anchor.AxisXCoordinate.Axis      = axisX;
                anchor.AxisXCoordinate.AxisValue = ValueX;

                anchor.AxisYCoordinate.Axis      = axisY;
                anchor.AxisYCoordinate.AxisValue = ValueY;
                break;
            }
        }
        private void addNewPic(DataTable dt)
        {
            // Create a chart.
            //

            ChartControl chart = chartControl2;//= chart;//= new ChartControl();

            chart.Series.Clear();
            // Create an empty Bar series and add it to the chart.
            Series series = new Series("裂缝半长", ViewType.Spline);

            chart.Series.Add(series);

            // Generate a data table and bind the series to it.
            series.DataSource = dt;

            // Specify data members to bind the series.
            series.ArgumentScaleType  = ScaleType.Numerical;
            series.ArgumentDataMember = "time";
            series.ValueScaleType     = ScaleType.Numerical;
            series.ValueDataMembers.AddRange(new string[] { "L" });
            ((PointSeriesView)series.View).Color = Color.FromArgb(125, Color.Green);
            // Create an empty Bar series and add it to the chart.

            Series series1 = new Series("缝宽", ViewType.Spline);

            chart.Series.Add(series1);

            // Generate a data table and bind the series to it.
            series1.DataSource = dt;

            // Specify data members to bind the series.
            series1.ArgumentScaleType  = ScaleType.Numerical;
            series1.ArgumentDataMember = "time";
            series1.ValueScaleType     = ScaleType.Numerical;
            series1.ValueDataMembers.AddRange(new string[] { "W0" });
            ((PointSeriesView)series1.View).Color = Color.FromArgb(125, Color.Red);



            chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;


            //SecondaryAxisX myAxisX = new SecondaryAxisX("watercutx");


            chart.CrosshairOptions.ShowArgumentLabels = true;
            chart.CrosshairOptions.ShowArgumentLine   = true;
            chart.CrosshairOptions.ShowValueLabels    = true;
            chart.CrosshairOptions.ShowValueLine      = true;
            chart.CrosshairOptions.ValueLineColor     = Color.DarkBlue;

            chart.CrosshairOptions.ArgumentLineColor   = Color.DarkBlue;
            chart.CrosshairOptions.ShowCrosshairLabels = false;
            //series1.CrosshairLabelPattern = series1.Name + ":{V:F0}";
            //series2.CrosshairLabelPattern = series1.Name + ":{V:F0}";
            // chart.CrosshairOptions.sh = true;

            //series2.CrosshairOptions.ShowArgumentLabels  rosshairOptions.ShowValueLabels
            //  series2.CrosshairOptions.sho  CrosshairOptions.ShowValueLine,
            //this.Controls.Add();



            XYDiagram diagram = (XYDiagram)chart.Diagram;

            diagram.Panes.Clear();
            diagram.SecondaryAxesY.Clear();
            diagram.SecondaryAxesX.Clear();

            // Enable the diagram's scrolling.
            diagram.EnableAxisXScrolling = false;
            diagram.EnableAxisYScrolling = false;

            // Customize the appearance of the axes' grid lines.
            diagram.AxisX.GridLines.Visible      = true;
            diagram.AxisX.GridLines.MinorVisible = false;

            diagram.AxisY.GridLines.Visible      = true;
            diagram.AxisY.GridLines.MinorVisible = true;

            //diagram.AxisY.Range.SetInternalMinMaxValues(1, 12);
            // Customize the appearance of the X-axis title.
            diagram.AxisX.Title.Visibility            = DevExpress.Utils.DefaultBoolean.True;
            diagram.AxisX.Title.Alignment             = StringAlignment.Center;
            diagram.AxisX.Title.Text                  = "时间(min)";
            diagram.AxisX.Title.TextColor             = Color.Black;
            diagram.AxisX.Title.Antialiasing          = true;
            diagram.AxisX.Title.Font                  = new Font("Microsoft YaHei", 10);
            diagram.AxisX.WholeRange.SideMarginsValue = 0;
            // Customize the appearance of the Y-axis title.
            diagram.AxisY.Title.Visibility   = DevExpress.Utils.DefaultBoolean.True;
            diagram.AxisY.Title.Alignment    = StringAlignment.Center;
            diagram.AxisY.Title.Text         = "缝宽(mm)";
            diagram.AxisY.Title.TextColor    = Color.Black;
            diagram.AxisY.Title.Antialiasing = true;
            diagram.AxisY.Title.Font         = new Font("Microsoft YaHei", 10);
            XYDiagramPane pane = new XYDiagramPane("留白");

            diagram.Panes.Add(pane);
            XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)chart.Series[0].View;
            int axesPosition             = diagram.SecondaryAxesY.Add(new SecondaryAxisY());

            diagram.SecondaryAxesY[axesPosition].Alignment              = AxisAlignment.Near;
            diagram.SecondaryAxesY[axesPosition].GridLines.Visible      = true;
            diagram.SecondaryAxesY[axesPosition].GridLines.MinorVisible = true;
            view.AxisY = diagram.SecondaryAxesY[axesPosition];
            int axesPosition2 = diagram.SecondaryAxesX.Add(new SecondaryAxisX());

            diagram.SecondaryAxesX[axesPosition2].Alignment         = AxisAlignment.Near;
            diagram.SecondaryAxesX[axesPosition2].GridLines.Visible = true;

            view.AxisX = diagram.SecondaryAxesX[axesPosition2];
            view.AxisX.WholeRange.SideMarginsValue              = 0;
            diagram.SecondaryAxesX[axesPosition2].Title.Text    = "时间(min)";
            diagram.SecondaryAxesY[axesPosition].Title.Text     = "缝长(m)";
            diagram.SecondaryAxesX[axesPosition2].Title.Font    = new Font("Microsoft YaHei", 10, FontStyle.Bold);
            diagram.SecondaryAxesY[axesPosition].Title.Font     = new Font("Microsoft YaHei", 10, FontStyle.Bold);
            diagram.SecondaryAxesX[axesPosition2].Title.Visible = true;
            diagram.SecondaryAxesY[axesPosition].Title.Visible  = true;
            diagram.SecondaryAxesX[axesPosition2].Title.Font    = new Font("Microsoft YaHei", 10);
            diagram.SecondaryAxesY[axesPosition2].Title.Font    = new Font("Microsoft YaHei", 10);
            view.Pane = pane;
        }
        private void printing()
        {
            DataTable datatable = DataBusiness.sql_GE.Get();

            gridControl1.DataSource = datatable;
            gridView1.Columns["Well_Num"].Visible = false;
            // gridView1.Columns["DEPTH"].OptionsColumn.AllowEdit = false;//不可编辑

            ///绘图
            this.chartControl1.Series.Clear();
            //新建线
            Series series1 = new Series("por", ViewType.Line);
            Series series2 = new Series("per", ViewType.Line);

            //描点
            for (int i = 0; i < datatable.Rows.Count; i++)
            {
                series1.Points.Add(new SeriesPoint(datatable.Rows[i][1], datatable.Rows[i][6]));
            }
            this.chartControl1.Series.Add(series1);

            for (int i = 0; i < datatable.Rows.Count; i++)
            {
                series2.Points.Add(new SeriesPoint(datatable.Rows[i][1], datatable.Rows[i][7]));
            }
            this.chartControl1.Series.Add(series2);


            XYDiagram diagram = chartControl1.Diagram as XYDiagram;

            //设置X滚动轴
            ((XYDiagram)this.chartControl1.Diagram).EnableAxisXZooming   = true;
            ((XYDiagram)this.chartControl1.Diagram).EnableAxisXScrolling = true;

            //新建pane
            XYDiagramPane Pane1 = new XYDiagramPane("per");

            diagram.Panes.Add(Pane1);

            diagram.AxisY.Alignment = AxisAlignment.Far;

            //翻转pane,即纵坐标为深度
            diagram.Rotated = true;
            //将两个pane横着排列
            diagram.PaneLayoutDirection = PaneLayoutDirection.Horizontal;

            //将seeies放在Pane1里
            ((XYDiagramSeriesViewBase)series2.View).Pane = Pane1;

            //设置title
            //this.chartControl1.Titles.Add(new ChartTitle());
            //this.chartControl1.Titles[0].Text = "图";

            //diagram.AxisY.Title.Visible = true;
            //diagram.AxisY.Title.Alignment = StringAlignment.Center;
            //diagram.AxisY.Title.Text = "por";

            diagram.AxisX.Title.Visible   = true;
            diagram.AxisX.Title.Alignment = StringAlignment.Center;
            diagram.AxisX.Title.Text      = "深度";
        }