public void FormatChart() { ToolTipRelativePosition pos = new ToolTipRelativePosition(); pos.OffsetX = -10; pos.OffsetY = -10; chart.ToolTipOptions.ToolTipPosition = pos; string mainTitleText = ""; try { //mainTitleText = String.Format("{0}{1}{2} (N={3})" // , _settings.title, Environment.NewLine, corrs.results(CorrPValueMode.CorrWithStars), corrs.n); mainTitleText = String.Format("{0} (N={1})" , corrs.results(CorrPValueMode.CorrWithStars), corrs.n); } catch (Exception ex) { } //string mainTitleText = ((Math.Abs(corrs.pearson - corrs.spearman)) > .2 ) ? // String.Format("{0}{1} r={3:.00} s={4:.00} N={2}" // , _settings.title, Environment.NewLine, corrs.n, corrs.pearson, corrs.spearman) // : String.Format("{0}{1} r={3:.00} N={2}" // , _settings.title, Environment.NewLine, corrs.n, corrs.pearson, corrs.spearman); chart.Width = _settings.W; chart.Height = _settings.H; //AddTitles(mainTitleText, subtitles, _settings.xaxisvar, _settings.yaxisvar, 10); if (subtitles == null) { AddTitles(mainTitleText, "", _settings.xaxisvar, _settings.yaxisvar, 10); } else { if (subtitles.Count > 0 & _settings.panevar == "none") { AddTitles(mainTitleText, subtitles, _settings.xaxisvar, _settings.yaxisvar, 10); } else { AddTitles(mainTitleText, "", _settings.xaxisvar, _settings.yaxisvar, 10); } } chart.BorderOptions.Color = Color.White; chart.CustomDrawSeriesPoint += Scatterplot_TransparentPoint; //chart.CustomCallback += _dxcharts.Mychart_CustomCallback; chart.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True; chart.ToolTipOptions.ShowForPoints = true; chart.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False; chart.SaveStateOnCallbacks = true; chart.Legend.MarkerMode = LegendMarkerMode.CheckBoxAndMarker; }
private void Form1_Load(object sender, EventArgs e) { // Create an empty chart. ChartControl chartControl = new ChartControl(); // Add the chart to the form. chartControl.Dock = DockStyle.Fill; this.Controls.Add(chartControl); // Create a series and add points to it. Series boundSeries = new Series("Bound Series", ViewType.Line); // Assign the created data source to the series. boundSeries.DataSource = CreateChartData(); boundSeries.ArgumentScaleType = ScaleType.Auto; boundSeries.ArgumentDataMember = "Argument"; boundSeries.ValueScaleType = ScaleType.Numerical; boundSeries.ValueDataMembers.AddRange(new string[] { "Value" }); Series unboundSeries = new Series("Unbound Series", ViewType.Line); unboundSeries.Points.Add(new SeriesPoint("A", new double[] { 9 })); unboundSeries.Points.Add(new SeriesPoint("B", new double[] { 7 })); unboundSeries.Points.Add(new SeriesPoint("C", new double[] { 23 })); unboundSeries.Points.Add(new SeriesPoint("D", new double[] { 9 })); unboundSeries.Points.Add(new SeriesPoint("E", new double[] { 23 })); unboundSeries.Points.Add(new SeriesPoint("F", new double[] { 17 })); unboundSeries.Points.Add(new SeriesPoint("G", new double[] { 20 })); Series unboundSeriesWithTag = new Series("Unbound Series with Tag", ViewType.Line); unboundSeriesWithTag.Points.Add(new SeriesPoint("A", 2) { Tag = new { Test = "TestValue" } }); unboundSeriesWithTag.Points.Add(new SeriesPoint("B", 0) { Tag = new { Test = "TestValue" } }); unboundSeriesWithTag.Points.Add(new SeriesPoint("C", 15) { Tag = new { Test = "TestValue" } }); unboundSeriesWithTag.Points.Add(new SeriesPoint("D", 2) { Tag = new { Test = "TestValue" } }); unboundSeriesWithTag.Points.Add(new SeriesPoint("E", 15) { Tag = new { Test = "TestValue" } }); unboundSeriesWithTag.Points.Add(new SeriesPoint("F", 10) { Tag = new { Test = "TestValue" } }); unboundSeriesWithTag.Points.Add(new SeriesPoint("G", 13) { Tag = new { Test = "TestValue" } }); // Add the series to the chart. chartControl.Series.AddRange(unboundSeries, unboundSeriesWithTag, boundSeries); // Enable data point markers. ((LineSeriesView)unboundSeries.View).MarkerVisibility = DefaultBoolean.True; ((LineSeriesView)unboundSeriesWithTag.View).MarkerVisibility = DefaultBoolean.True; ((LineSeriesView)boundSeries.View).MarkerVisibility = DefaultBoolean.True; // Disable a crosshair cursor. chartControl.CrosshairEnabled = DefaultBoolean.False; // Enable chart tooltips. chartControl.ToolTipEnabled = DefaultBoolean.True; // Show a tooltip's beak. ToolTipController controller = new ToolTipController(); chartControl.ToolTipController = controller; controller.ShowBeak = true; // Change the default tooltip mouse position to relative position. ToolTipRelativePosition relativePosition = new ToolTipRelativePosition(); chartControl.ToolTipOptions.ToolTipPosition = relativePosition; // Specify the tooltip relative position offsets. relativePosition.OffsetX = 2; relativePosition.OffsetY = 2; // Specify the tooltip point pattern. unboundSeries.ToolTipPointPattern = "Line Series: {A}:{V}"; unboundSeriesWithTag.ToolTipPointPattern = "{A}: {V} ({Test})"; boundSeries.ToolTipPointPattern = "{A}: {V} ({Comment})"; }
public void CreateLineplot(DataTable mydt) { _coloroverride = -1; string seriesby = _settings.seriesby; string colorsby = _settings.colorvar; Color myseriescolor; DataTable dataxy_all = DataTableExtensions.Data_SelectColumnXY(mydt, _settings.xaxisvar, _settings.yaxisvar, seriesby, colorsby); List <string> series_levels = dataxy_all.AsEnumerable().Select(x => x.Field <string>("seriesby")).Distinct().ToList(); List <string> colors_levels = dataxy_all.AsEnumerable().Select(x => x.Field <string>("colorsby")).Distinct().ToList(); colors_levels.Sort(); _colorLevels = colors_levels; //use this to create a manual legend later if needed List <string> seriesIDs = new List <string>(); if (seriesby == "id") { seriesIDs = dataxy_all.AsEnumerable().Select(x => x.Field <string>("id")).Distinct().ToList(); } else { seriesIDs = dataxy_all.AsEnumerable().Select(x => x.Field <string>("seriesby")).Distinct().ToList(); } int _nall = dataxy_all.Rows.Count; if (_nall > 0) { List <Series> list_o_series = new List <Series>(); //foreach (string s in seriesIDs) for (int s = 0; s < seriesIDs.Count; s++) { for (int s_color = 0; s_color < colors_levels.Count; s_color++) { dataxy_all.DefaultView.Sort = "seriesby ASC, colorsby ASC, x ASC"; dataxy_all.DefaultView.ApplyDefaultSort = true; DataView vw = dataxy_all.AsDataView(); string rowfilter = (seriesby == "id") ? String.Format("{0}='{1}' and colorsby='{2}'", seriesby, seriesIDs[s], colors_levels[s_color]) : String.Format("{0}='{1}' and colorsby='{2}'", "seriesby", seriesIDs[s], colors_levels[s_color]); //string rowfilter = (seriesby == "id") ? // String.Format("{0}='{1}'", seriesby, seriesIDs[s]) : // String.Format("{0}='{1}'", "seriesby", seriesIDs[s]); vw.RowFilter = rowfilter; //vw.Sort = String.Format("{0} {1}", "x", "ASC"); //sort by the x variable //vw.ApplyDefaultSort = true; DataTable dataxy = vw.ToTable(); dataxy.DefaultView.Sort = "x ASC"; dataxy.DefaultView.ApplyDefaultSort = true; n = dataxy.Rows.Count; if (n > 0) { string current_colorlevel = dataxy.AsEnumerable().Select(f => f.Field <string>("colorsby")).Min().ToString(); List <string> series_colors = dataxy.AsEnumerable().Select(f => f.Field <string>("colorsby")).ToList(); //Switch to alternate geom if needed if (_settings.vars_for_altgeom.Contains(current_colorlevel)) { _settings.activegeom = _settings.altgeom; } else { _settings.activegeom = _settings.geom; } int colorindex = 0; //Get the correct color if (colorsby != "none") { for (int c = 0; c < colors_levels.Count; c++) { if (current_colorlevel == colors_levels[c]) { colorindex = c; } } } myseriescolor = _settings.color(colorindex % 15); if (_coloroverride >= 0) { myseriescolor = _settings.color(_coloroverride % 15); } SeriesPoint[] seriesPoints = CreateSeriesPoints(dataxy, colorsby, colors_levels, series_colors, colorindex, myseriescolor); //TOFIX SeriesPoint[] seriesPoints = new DxSeriesPoints(dataxy, "x", "y", colorsby, colors_levels, series_colors, colorindex, myseriescolor); Series series = new Series(); SideBySideBarSeriesView barSeriesView = new SideBySideBarSeriesView(); LineSeriesView lineSeriesView = new LineSeriesView(); PointSeriesView pointSeriesView = new PointSeriesView(); if (_settings.activegeom == LineplotGeom.Bar) { //barSeriesView = new SideBySideBarSeriesView() ; } else if (_settings.activegeom == LineplotGeom.Line) { //lineSeriesView = new LineSeriesView(); lineSeriesView.LineMarkerOptions.FillStyle.FillMode = FillMode.Solid; lineSeriesView.LineMarkerOptions.Kind = _markers[s % _markers.Count]; } else { pointSeriesView.PointMarkerOptions.FillStyle.FillMode = FillMode.Solid; MarkerKind mymarker = new MarkerKind(); if (_settings.activegeom == LineplotGeom.Circle) { mymarker = MarkerKind.Circle; } if (_settings.activegeom == LineplotGeom.Square) { mymarker = MarkerKind.Square; } if (_settings.activegeom == LineplotGeom.Cross) { mymarker = MarkerKind.Cross; } if (_settings.activegeom == LineplotGeom.Star) { mymarker = MarkerKind.Star; } pointSeriesView.PointMarkerOptions.Kind = mymarker; pointSeriesView.PointMarkerOptions.Size = _settings.markersize; if (_settings.activegeom == LineplotGeom.Star) { pointSeriesView.PointMarkerOptions.StarPointCount = 6; } } if (_settings.xaxis_is_date) { this.xydiagram.AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Continuous; this.xydiagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Month; this.xydiagram.AxisX.Label.TextPattern = "{A:dd-MMM-yy}"; series.ToolTipPointPattern = "x={A:dd-MMM-yy} y={V:F2} {HINT}"; } else { series.ToolTipPointPattern = "x={A:F2} y={V:F2} {HINT}"; } ToolTipRelativePosition pos = new ToolTipRelativePosition(); pos.OffsetX = -10; pos.OffsetY = -10; chart.ToolTipOptions.ToolTipPosition = pos; if (_settings.activegeom == LineplotGeom.Bar) { series.View = barSeriesView; } else if (_settings.activegeom == LineplotGeom.Line) { series.View = lineSeriesView; } else { series.View = pointSeriesView; } series.Points.AddRange(seriesPoints); list_o_series.Add(series); } } } //Add the series to the chart int max_pts = list_o_series.Select(s => s.Points.Count).Max(); foreach (Series s in list_o_series) { //first add those with the max number of points if (s.Points.Count == max_pts) { chart.Series.Add(s); } } foreach (Series s in list_o_series) { //then add those with fewer points if (s.Points.Count != max_pts) { chart.Series.Add(s); } } // consider adding N=??, intrcpt=, slope= string mytitle = ""; string mainTitleText = String.Format("{0}", mytitle); //, seriesPoints.Count()); chart.Width = _settings.W; chart.Height = _settings.H; this.AddTitles(mainTitleText, "", _settings.xaxisvar, _settings.yaxisvar); chart.BorderOptions.Color = Color.White; chart.CustomDrawSeriesPoint += Lineplot_TransparentPoint; chart.CustomDrawSeries += Lineplot_TransparentLine; //chart.CustomCallback += _dxcharts.Mychart_CustomCallback; chart.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True; chart.ToolTipOptions.ShowForSeries = true; chart.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False; if (colorsby != "none") { for (int lev = 0; lev < colors_levels.Count; lev++) { // Create a new custom item. CustomLegendItem item = new CustomLegendItem(); chart.Legend.CustomItems.Add(item); // Specify its text and marker. item.Text = colors_levels[lev]; int coloridx = (_coloroverride >= 0) ? _coloroverride : lev; item.MarkerColor = _settings.colors[coloridx % _settings.colors.Count]; //item. } } chart.Legend.Visibility = (_settings.showLegend) ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False; LegendAlignmentHorizontal legend_h = new LegendAlignmentHorizontal(); LegendAlignmentVertical legend_v = new LegendAlignmentVertical(); if (_settings.legend_pos_h == "Right") { legend_h = LegendAlignmentHorizontal.Right; } else if (_settings.legend_pos_h == "RightOutside") { legend_h = LegendAlignmentHorizontal.RightOutside; } else if (_settings.legend_pos_h == "Left") { legend_h = LegendAlignmentHorizontal.Left; } else if (_settings.legend_pos_h == "LeftOutside") { legend_h = LegendAlignmentHorizontal.LeftOutside; } else if (_settings.legend_pos_h == "Center") { legend_h = LegendAlignmentHorizontal.Center; } if (_settings.legend_pos_v == "Top") { legend_v = LegendAlignmentVertical.Top; } else if (_settings.legend_pos_v == "TopOutside") { legend_v = LegendAlignmentVertical.TopOutside; } else if (_settings.legend_pos_v == "Bottom") { legend_v = LegendAlignmentVertical.Bottom; } else if (_settings.legend_pos_v == "BottomOutside") { legend_v = LegendAlignmentVertical.BottomOutside; } else if (_settings.legend_pos_v == "Center") { legend_v = LegendAlignmentVertical.Center; } chart.Legend.AlignmentHorizontal = legend_h; chart.Legend.AlignmentVertical = legend_v; // Set a value indicating that both autogenerated and custom items are displayed. chart.Legend.ItemVisibilityMode = LegendItemVisibilityMode.AutoGeneratedAndCustom; } else { //_emptymsg = String.Format("0 cases for{3}{0}{3}{1} by {2}", mytitle, xvar, yvar, Environment.NewLine); //return null; } }
private void CreateEventsOnCharts(ChartRenderModel model, int width, int chartsCount, bool isMultiPaneChart = false) { Series series2 = new Series("My Series2", ViewType.Bar); series2.ArgumentDataMember = "Datum"; series2.ArgumentScaleType = ScaleType.DateTime; series2.ValueDataMembers[0] = "Vrednost"; series2.ValueScaleType = ScaleType.Numerical; ((SideBySideBarSeriesView)series2.View).BarWidth = 1.4; double maxVrednost = Convert.ToDouble(model.chartRenderData.Max(crd => crd.Vrednost)); if (model.EventList.Count > 0) { EventLinkWrap.Style.Add("max-width", ((width / chartsCount) - 50).ToString() + "px"); model.EventList = model.EventList.OrderBy(el => el.DatumOtvoritve).ToList();//we sor elements from the youngest event to the oldest foreach (EventSimpleModel item in model.EventList) { SeriesPoint point = new SeriesPoint(item.DatumOtvoritve, new double[] { maxVrednost }); point.ToolTipHint = item.DatumOtvoritve.ToString("dd MMMM yyyy") + (String.IsNullOrEmpty(item.Opis) ? "" : "\r\n" + "Opis: " + item.Opis); series2.Points.Add(point); string link = RedirectToEvent(item.idDogodek, item.idStranka, item.idKategorija, item.Izvajalec); EventLinkWrap.InnerHtml += "<div class='eventLinkWrap'><a class='eventLink' href='" + link + "' title='Pojdi na dogodek st.: " + item.idDogodek.ToString() + "'>" + item.DatumOtvoritve.ToString("dd MMMM yyyy") + "</a></div>"; } ToolTipRelativePosition relativePosition = new ToolTipRelativePosition(); WebChartControl1.ToolTipOptions.ToolTipPosition = relativePosition; relativePosition.OffsetX = 2; relativePosition.OffsetY = 2; series2.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True; series2.ToolTipPointPattern = "Datum dogodka: {HINT}"; series2.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False; } WebChartControl1.Series.Add(series2); int newMinValue = -10; if (maxVrednost > 1000) { newMinValue = -100; } else if (maxVrednost > 100) { newMinValue = -10; } else { newMinValue = -1; } DateTimeGridAlignment dateTimeGridAlignment = DateTimeGridAlignment.Month; if (CommonMethods.ParseInt(rbPeriod.Value) == (int)Enums.ChartRenderPeriod.LETNO) { dateTimeGridAlignment = DateTimeGridAlignment.Year; } ((XYDiagram)WebChartControl1.Diagram).AxisX.Label.ResolveOverlappingOptions.AllowHide = false; if (!isMultiPaneChart) { ((XYDiagram)WebChartControl1.Diagram).AxisX.DateTimeScaleOptions.GridAlignment = dateTimeGridAlignment; } /*((XYDiagram)WebChartControl1.Diagram).AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Month;*/ ((XYDiagram)WebChartControl1.Diagram).AxisX.Label.ResolveOverlappingOptions.AllowRotate = true; ((XYDiagram2D)WebChartControl1.Diagram).EnableAxisYZooming = true; ((XYDiagram2D)WebChartControl1.Diagram).GetAllAxesY()[0].WholeRange.MinValue = newMinValue; }