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); }
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; }
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)); } }
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; } }
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); }
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; }
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; } } }
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); }
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); }
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; } }
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); // } //} } }
// 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; }
// 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; }
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; }
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(); } }
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; } } } }
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); }
//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; }
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; }
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 = "深度"; }