This problem is related to different serie types are added to the chartview
Currently only axes labels can be rotated. There should be a way to rotate series labels as well. Resolution: Set the LabelRotationAngle property of the series to preferred angle.
To reproduce: - Start the Q3 2014 SP1 demo application. - Open the Bar example. - Set the orientation to horizontal. In addition please note that the first and the last labels of the horizontal axis are missing as well. Workaround: CategoricalAxis vertiacalAxis = radChartView1.Axes[1] as CategoricalAxis; if (vertiacalAxis != null) { vertiacalAxis.LabelFitMode = AxisLabelFitMode.Rotate; vertiacalAxis.LabelRotationAngle = .1; }
When one adds data points with negative and positive values, the negative ones should go below the 0, for example, with the following data: AreaSeries areaSeries = new AreaSeries(); areaSeries.DataPoints.Add(new CategoricalDataPoint(5, "Jan")); areaSeries.DataPoints.Add(new CategoricalDataPoint(-10, "Apr")); Resolution: To use the functionality one should set the StartPositionAxis and StartPositionValue properties of an axis. The first property is the axis along which the current axis will be aligned. The second is the value where the current axis should be positioned. Here is a sample code: AreaSeries areaSeries = new AreaSeries(); areaSeries.DataPoints.Add(new CategoricalDataPoint(13, "Jan")); areaSeries.DataPoints.Add(new CategoricalDataPoint(20, "Apr")); areaSeries.DataPoints.Add(new CategoricalDataPoint(-15, "Jul")); areaSeries.DataPoints.Add(new CategoricalDataPoint(16, "Oct")); this.radChartView1.Series.Add(areaSeries); areaSeries.HorizontalAxis.StartPositionAxis = areaSeries.VerticalAxis; areaSeries.HorizontalAxis.StartPositionValue = 0;
FIX. RadChartView - Vertical Stripes go out of the chart area when PanZoom is using.
To reproduce: Add a RadChartView to a Form. Use the following code: this.Chart.AreaType = ChartAreaType.Pie; this.Chart.ShowLegend = true; PieSeries series = new PieSeries(); series.DataPoints.Add(new PieDataPoint(50, "Germany")); series.DataPoints.Add(new PieDataPoint(70, "United States")); series.DataPoints.Add(new PieDataPoint(40, "France")); series.DataPoints.Add(new PieDataPoint(25, "United Kingdom")); series.ShowLabels = true; this.Chart.Series.Add(series); Workaround: Private Sub LegendElement_VisualItemCreating(sender As Object, e As LegendItemElementCreatingEventArgs) Dim pieElement As PiePointElement = DirectCast(e.LegendItem.Element, PiePointElement) Dim dataPoint As PieDataPoint = DirectCast(pieElement.DataPoint, PieDataPoint) e.LegendItem.Title = dataPoint.Name End Sub
Add BarSeries with several CategoricalDataPoint with some long category text. Change the chart's area orientation, then you will notice that the AxisLabelElements overlaps the axis
Add HLC (high-low-close) Series to RadChartView
To reproduce: You need a RadChartView with some series. You need to add a new View - radChartView1.Views.AddNew("Bigger"); You also need to add a DrillDownController: DrillDownController drillcontrol = new DrillDownController(); radChartView1.Controllers.Add(drillcontrol); radChartView1.ShowDrillNavigation = true; On the Drill event of RadChartView you need to reload the chart. This must clear the axes on the current view (determined by the drill level) and add new ones. You will see that the legend will not update. Additional details can be found in the attached project. Workaround: Re-add the legend items manually: private void radChartView1_Drill(object sender, DrillEventArgs e) { if (e.Level == 0) BiggerView = false; else BiggerView = true; ReloadChart(); this.radChartView1.ChartElement.LegendElement.StackElement.Children.Clear(); ChartView currentView = this.radChartView1.Views[BiggerView ? 1 : 0]; foreach (ChartSeries series in currentView.Series) { LegendItem item = new LegendItem(series) { Title = series.Name }; LegendItemElement element = new LegendItemElement(item); this.radChartView1.ChartElement.LegendElement.StackElement.Children.Add(element); } }
We should add a way for users to bind a property in the data source that will be used as a legend title for pie data points. Resolution: Set the LegendTitleMember property to bind legend title of PieSeries.
Create a chart with a LinesSeries with a DateTimeContinuousAxis axis and set the following properties: DateTimeContinuousAxis horizontalAxis = new DateTimeContinuousAxis(); horizontalAxis.Title = tupleItem.HorizontalAxis; horizontalAxis.AxisType = AxisType.First; horizontalAxis.VerticalLocation = AxisVerticalLocation.Bottom; horizontalAxis.AutomaticBorderColor = false; horizontalAxis.MaximumTicks = 10; horizontalAxis.LabelFormat = "{0:HH:mm:ss.fff}"; You will see that there are less labels than ticks. When the chart is zoomed the labels also disappear from the ticks.
To reproduce use the following code: public Form1() { InitializeComponent(); radChartView1.AreaType = Telerik.WinControls.UI.ChartAreaType.Pie; radChartView1.ShowLegend = true; series.ValueMember = "CategoryID"; series.DisplayMember = "CategoryName"; series.DataSource = this.nwindDataSet1.Categories; radChartView1.Series.Add(series); } private void radButton1_Click(object sender, EventArgs e) { this.categoriesTableAdapter.Fill(this.nwindDataSet1.Categories); } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'nwindDataSet1.Categories' table. You can move, or remove it, as needed. this.categoriesTableAdapter.Fill(this.nwindDataSet1.Categories); } Workaround: - Clear the items manually: this.radChartView1.ChartElement.LegendElement.StackElement.Children.Clear();
To reproduce: SteplineSeries stepLineSeries = new SteplineSeries(); stepLineSeries.DataPoints.Add(new CategoricalDataPoint(12, "Jan")); stepLineSeries.DataPoints.Add(new CategoricalDataPoint(42, "Apr")); stepLineSeries.DataPoints.Add(new CategoricalDataPoint(28, "Jul")); stepLineSeries.DataPoints.Add(new CategoricalDataPoint(12, "Oct")); this.radChartView1.Series.Add(stepLineSeries); CartesianArea area = this.radChartView1.Area as CartesianArea ; area.Orientation = Orientation.Horizontal; Please refer to the attached screenshots. Workaround: use LineSeries with custom CartesianRenderer: public Form1() { InitializeComponent(); this.radChartView1.CreateRenderer += radChartView1_CreateRenderer; LineSeries lineSeries = new LineSeries(); lineSeries.DataPoints.Add(new CategoricalDataPoint(12, "Jan")); lineSeries.DataPoints.Add(new CategoricalDataPoint(42, "Apr")); lineSeries.DataPoints.Add(new CategoricalDataPoint(28, "Jul")); lineSeries.DataPoints.Add(new CategoricalDataPoint(12, "Oct")); this.radChartView1.Series.Add(lineSeries); CartesianArea area = this.radChartView1.Area as CartesianArea ; area.Orientation = Orientation.Horizontal; } private void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e) { e.Renderer = new CustomCartesianRenderer((CartesianArea)e.Area); } 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++) { LineSeriesDrawPart drawPart = this.DrawParts[i] as LineSeriesDrawPart; if (drawPart != null) { this.DrawParts[i] = new CustomLineDrawPart((LineSeries)drawPart.Element, this); } } } } public class CustomLineDrawPart : LineSeriesDrawPart { public CustomLineDrawPart(LineSeriesBase series, IChartRenderer renderer) : base(series, renderer) { } protected override GraphicsPath GetLinePaths(PointF[] points) { GraphicsPath path = new GraphicsPath(); PointF x; PointF y; List<PointF> pointsList = points.ToList(); CartesianArea area = this.Element.Parent as CartesianArea; if (area != null && area.Orientation == Orientation.Horizontal) { pointsList = pointsList.OrderBy(p => p.Y).ThenBy(p => p.X).ToList(); } if (pointsList.Count > 1) { for (int i = 1; i < pointsList.Count; i++) { x = pointsList[i - 1]; y = pointsList[i]; path.AddLine(x.X, x.Y, y.X, x.Y); path.AddLine(y.X, x.Y, y.X, y.Y); } } else { return null; } return path; } }
To reproduce: Add a RadChartView and use the following code: public Form1() { InitializeComponent(); this.radChartView1.ShowTrackBall = true; this.radChartView1.ShowLegend = true; Random rand = new Random(); var lineSeries = new LineSeries(); for (int i = 0; i < 1000; i++) { lineSeries.DataPoints.Add(new CategoricalDataPoint(i, rand.Next(0, rand.Next(5, 20)))); } radChartView1.Series.Add(lineSeries); } Workaround: change the LegendPosition: this.radChartView1.ChartElement.LegendPosition = LegendPosition.Bottom;
To reproduce use the following code to initialize the chart: DataTable dt = new DataTable(); dt.Columns.Add("Category", typeof(string)); dt.Columns.Add("Value", typeof(int)); dt.Rows.Add("010010", 5); dt.Rows.Add("000020", 6); dt.Rows.Add("000030", 2); dt.Rows.Add("000040", 11); return dt; BarSeries bs = new BarSeries("Value", "Category"); bs.Palette = new PaletteEntry(Color.BlanchedAlmond); radChartView1.DataSource = dt; radChartView1.Series.Clear(); radChartView1.Series.Add(bs); radChartView1.GetArea<CartesianArea>().Orientation = Orientation.Horizontal; Workaround: CategoricalAxis Axis = radChartView1.Axes.Get<CategoricalAxis>(1); Axis.LabelFormat = "{0:000000}";
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; }
To reproduce: protected override void OnLoad(EventArgs e) { base.OnLoad(e); InitializeComponent(); radChartView1 = new RadChartView(); this.Controls.Add(radChartView1); DateTimeContinuousAxis asseX = new DateTimeContinuousAxis(); LinearAxis asseY = new LinearAxis(); asseY.AxisType = AxisType.Second; asseY.Minimum = 0; asseY.Maximum = 200; asseY.HorizontalLocation = Telerik.Charting.AxisHorizontalLocation.Right; asseY.LabelFormat = "{0} °C"; LineSeries serie = new LineSeries(); serie.DataPoints.Add(new CategoricalDataPoint(150, DateTime.Now)); serie.VerticalAxis = asseY; serie.HorizontalAxis = asseX; radChartView1.Series.Add(serie); } Workaround is available in the attached project.
Add several data points with date time objects as their categories. Make sure the time span these date time objects is within a few seconds. You will see that not all labels will be displayed by the chart.