3D Charts will be a nice addition to the WinForms suite
http://www.telerik.com/help/wpf/common-export-support.html Resolution: Add an option to export the chart to an image or a stream using the ExportToImage methods.
Add vertical cursors for Line series that stay in place unless the user drags them. Each cursor should select the data points that covers. The cursor should allow setting its position programmatically.
Currently values can only increase from left to right and from bottom to top.
RadChartView should visualize the pan and zoom state of a view through a scroll bar
http://www.telerik.com/help/winforms/chart-features-marked-zones.html
To reproduce: - Add at least two series and zoom the chart so the point from one of the series are visible only - Move the TrackBall - The Track ball is not shown for some of the points.
Steps to reproduce: 1. Add a chart to a form. 2. Add any cartesian series 3. Set the LabelFitMode of the horizontal axis to Rotate. You will see that labels have incorrect layout.
Currently RadChartView does not support null values.
IMPROVE. RadChartView - one should be able to access the tooltip instance in order to customize it (change font, delay, etc)
To reproduce: public Form1() { InitializeComponent(); ScatterSeries series = new ScatterSeries(); series.DataPoints.Add(new ScatterDataPoint(5, 5)); series.DataPoints.Add(new ScatterDataPoint(4, 2)); series.DataPoints.Add(new ScatterDataPoint(-1, 3)); series.DataPoints.Add(new ScatterDataPoint(8, 4)); radChartView1.Series.Add(series); LinearAxis horizontalAxis = radChartView1.Axes.Get<LinearAxis>(0); horizontalAxis.Minimum = -10; horizontalAxis.Maximum = 10; } private void radButton1_Click(object sender, EventArgs e) { LinearAxis horizontalAxis = radChartView1.Axes.Get<LinearAxis>(0); horizontalAxis.DesiredTickCount = 20; }
Add print functionality
Steps to reproduce. 1. Add a chart view to a form. 2. Create a series and add several data points. For categories use double values in the range 10 - 20 3. Create a second series and this time for categories use double values in the same range without duplication. 4. Assign one linear and one categorical axis to the series and add them to the char view. 5. Run the project and you will see that the categories from the second series are next to those from the first series, while they should be combined according their values.
I'm using version 2012.3.1310.40 I use ChartView to create a pie chart with the following data Assets 2248550.22 Income 19748.67 Equity 2228253.95 Liability 547.60 So, when the chart displays, the Percentage is set as follows: Assets 50% Income 0% Equity 50% Liability 0% I notice when the percentage is 0% for any data, the pie chart shows "0%" near the chart title (please see attachment). Or if the calculated data returns 0, it doesn't show any percentage on the chart, but it will shows "NaN" near the title as well. (please see attachment).
When setting the border color of the axis the labels are showing a border with the same color. The color is inherited from the axis element. One should be able to easily disable this, or it should not happen. How to reproduce: public partial class RadForm1 : Telerik.WinControls.UI.RadForm { LineSeries lineSeries; public RadForm1() { InitializeComponent(); this.lineSeries = new LineSeries(); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(20, "Jan")); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(22, "Apr")); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(25, "Jul")); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(19, "Oct")); this.radChartView1.Series.Add(this.lineSeries); this.lineSeries.HorizontalAxis.BorderColor = Color.Green; this.lineSeries.VerticalAxis.BorderColor = Color.Blue; } } Workaround: iterate each of the axis labels and set their border color to Transparent public partial class RadForm1 : Telerik.WinControls.UI.RadForm { LineSeries lineSeries; public RadForm1() { InitializeComponent(); this.lineSeries = new LineSeries(); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(20, "Jan")); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(22, "Apr")); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(25, "Jul")); this.lineSeries.DataPoints.Add(new CategoricalDataPoint(19, "Oct")); this.radChartView1.Series.Add(this.lineSeries); this.lineSeries.HorizontalAxis.BorderColor = Color.Green; this.lineSeries.VerticalAxis.BorderColor = Color.Blue; } protected override void OnShown(EventArgs e) { base.OnShown(e); foreach (var item in this.lineSeries.VerticalAxis.Children) { AxisLabelElement label = item as AxisLabelElement; if (label != null) { label.BorderColor = Color.Transparent; } } foreach (var item in this.lineSeries.HorizontalAxis.Children) { AxisLabelElement label = item as AxisLabelElement; if (label != null) { label.BorderColor = Color.Transparent; } } } }
One should be able to add annotations at certain positions within RadChartView.
Workaround: public class CustomLassoZoomController : LassoZoomController { protected override ActionResult OnMouseUp(MouseEventArgs e) { if (this.MouseDownLocation == Point.Empty || this.MouseMoveLocation == Point.Empty) { return Controller.Empty; } return base.OnMouseUp(e); } } public Form1() { InitializeComponent(); BarSeries barSeries = new BarSeries("Performance", "RepresentativeName"); barSeries.Name = "Q1"; barSeries.DataPoints.Add(new CategoricalDataPoint(177, "Harley")); barSeries.DataPoints.Add(new CategoricalDataPoint(128, "White")); barSeries.DataPoints.Add(new CategoricalDataPoint(143, "Smith")); barSeries.DataPoints.Add(new CategoricalDataPoint(111, "Jones")); barSeries.DataPoints.Add(new CategoricalDataPoint(118, "Marshall")); this.radChartView1.Series.Add(barSeries); BarSeries barSeries2 = new BarSeries("Performance", "RepresentativeName"); barSeries2.Name = "Q2"; barSeries2.DataPoints.Add(new CategoricalDataPoint(153, "Harley")); barSeries2.DataPoints.Add(new CategoricalDataPoint(141, "White")); barSeries2.DataPoints.Add(new CategoricalDataPoint(130, "Smith")); barSeries2.DataPoints.Add(new CategoricalDataPoint(88, "Jones")); barSeries2.DataPoints.Add(new CategoricalDataPoint(109, "Marshall")); this.radChartView1.Series.Add(barSeries2); CustomLassoZoomController lassoZoomController = new CustomLassoZoomController(); radChartView1.Controllers.Add(lassoZoomController); }
This problem is related to different serie types are added to the chartview
Note: similar to the axis, the series should also have ClipLabels property which will control whether the labels will be clipped or not. How to reproduce: zoom and pan along the chart public Form1() { InitializeComponent(); this.radChartView1.CreateRenderer += radChartView1_CreateRenderer; this.radChartView1.ShowPanZoom = true; BarSeries barSeries = new BarSeries(); Random rand = new Random(); for (int i = 1; i < 10; i++) { barSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(100), i)); } barSeries.ShowLabels = true; this.radChartView1.Series.Add(barSeries); } Workaround: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radChartView1.CreateRenderer += radChartView1_CreateRenderer; this.radChartView1.ShowPanZoom = true; BarSeries barSeries = new BarSeries(); Random rand = new Random(); for (int i = 1; i < 10; i++) { barSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(100), i)); } barSeries.ShowLabels = true; this.radChartView1.Series.Add(barSeries); } private void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e) { e.Renderer = new CustomCartesianRenderer(e.Area as CartesianArea); } } public class CustomCartesianRenderer : CartesianRenderer { public CustomCartesianRenderer(CartesianArea area) : base(area) { } protected override void Initialize() { base.Initialize(); for (int i = 0; i < this.DrawParts.Count; i++) { BarLabelElementDrawPart labelPart = this.DrawParts[i] as BarLabelElementDrawPart; if (labelPart != null) { this.DrawParts[i] = new CustomLabelElementDrawPart((BarSeries)labelPart.Element, this); } } } } public class CustomLabelElementDrawPart : BarLabelElementDrawPart { public CustomLabelElementDrawPart(ChartSeries owner, IChartRenderer renderer) : base(owner, renderer) { } public override void Draw() { Graphics graphics = this.Renderer.Surface as Graphics; CartesianSeries cartesianSeries = this.Element as CartesianSeries; if (cartesianSeries != null) { CartesianArea area = (CartesianArea)cartesianSeries.GetType().GetField("area", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(cartesianSeries); RectangleF clipRect = (RectangleF)area.GetType().GetMethod("GetCartesianClipRect", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(area, new object[] { });//.GetCartesianClipRect(); graphics.SetClip(clipRect); } base.Draw(); graphics.ResetClip(); } }