I am attempting to create a chart that has a line connection to the mean points of a box chart in the example provided below.
I have created a composite chart with two layers (BoxChart, and LineChart). BoxChart uses the X_Axis, "ContinuousData", and the Y_Axis, "GroupBySeries", with a BoxSetSeries bound datatable.
The LineChart uses the X2_Axis, "ContinuousData", and shares the before mentioned Y_Axis, "GroupBySeries", with a NumericSeries bound datatable.
First, the linechart refuses to acknowledge a datatable of the example format:
"Line1", 1, 2, 3, 4, 5
"Line2", 2, 3, 4, 5, 6
According to the Infragistics WebChart.pdf, the chart should use the first string column as labels and the first numerical value as point1, second numerical value as point2, and so forth. This will not render, nor are any errors thrown.
Even when I can get the linechart to render using a points collection or a different datatable format in cooperation with multiple series, the points will not plot in the same "columns" as the BoxChart because of the LineChart's X2_Axis.SetLabelAxisType = "Continuous".
Please let me know if this is even possible using the 2008 vol 3 infragistics controls.
Thank you.
Here's an example of using box and line charts in a composite chart:DataTable chartData = new DataTable();chartData.Columns.Add("Name", typeof(string));chartData.Columns.Add("Min", typeof(double));chartData.Columns.Add("Max", typeof(double));chartData.Columns.Add("Q1", typeof(double));chartData.Columns.Add("Q2", typeof(double));chartData.Columns.Add("Q3", typeof(double));
chartData.Rows.Add(new object[] { "item1", 5, 20, 7, 10, 12 });chartData.Rows.Add(new object[] { "item2", 4, 25, 6, 16, 20 });chartData.Rows.Add(new object[] { "item3", 2, 10, 3, 5, 7 });chartData.Rows.Add(new object[] { "item4", 7, 30, 12, 20, 25 });chartData.Rows.Add(new object[] { "item5", 5, 25, 8, 12, 21 });
BoxSetSeries boxSeries = new BoxSetSeries();boxSeries.Data.DataSource = chartData;boxSeries.Data.LabelColumn = "Name";boxSeries.Data.MinColumn = "Min";boxSeries.Data.MaxColumn = "Max";boxSeries.Data.Q1Column = "Q1";boxSeries.Data.Q2Column = "Q2";boxSeries.Data.Q3Column = "Q3";boxSeries.DataBind();
NumericSeries lineSeries = new NumericSeries();lineSeries.Data.DataSource = chartData;lineSeries.Data.LabelColumn = "Name";lineSeries.Data.ValueColumn = "Q2";lineSeries.DataBind();
ultraChart1.ChartType = ChartType.Composite;
ultraChart1.CompositeChart.Series.Add(boxSeries);ultraChart1.CompositeChart.Series.Add(lineSeries);
ChartArea area = new ChartArea();ultraChart1.CompositeChart.ChartAreas.Add(area);
AxisItem xAxisBox = new AxisItem(ultraChart1, AxisNumber.X_Axis);xAxisBox.DataType = AxisDataType.String;xAxisBox.SetLabelAxisType = SetLabelAxisType.ContinuousData;
AxisItem xAxisLine = new AxisItem(ultraChart1, AxisNumber.X_Axis);xAxisLine.DataType = AxisDataType.String;xAxisLine.SetLabelAxisType = SetLabelAxisType.ContinuousData;xAxisLine.Margin.Near.MarginType = LocationType.RowColumn;xAxisLine.Margin.Near.Value = .4;xAxisLine.Margin.Far.MarginType = LocationType.RowColumn;xAxisLine.Margin.Far.Value = .4;
AxisItem yAxis = new AxisItem(ultraChart1, AxisNumber.Y_Axis);yAxis.DataType = AxisDataType.Numeric;
area.Axes.Add(xAxisBox);area.Axes.Add(xAxisLine);area.Axes.Add(yAxis);
ChartLayerAppearance boxLayer = new ChartLayerAppearance();boxLayer.ChartArea = area;boxLayer.AxisX = xAxisBox;boxLayer.AxisY = yAxis;boxLayer.ChartType = ChartType.BoxChart;
ChartLayerAppearance lineLayer = new ChartLayerAppearance();lineLayer.ChartArea = area;lineLayer.AxisX = xAxisLine;lineLayer.AxisY = yAxis;lineLayer.ChartType = ChartType.LineChart;
boxLayer.Series.Add(boxSeries);lineLayer.Series.Add(lineSeries);
ultraChart1.CompositeChart.ChartLayers.Add(boxLayer);ultraChart1.CompositeChart.ChartLayers.Add(lineLayer);
Hey Max, I'm trying to align the midpoints from the line chart and the mid-of-the-box chart, but the values you gave for the near and far margins aren't working. They seem to only work for a table with five rows. Can you please explain how you defined them?
I got it:
Calculate the Fraction of the Total Space Each Row Occupies:
1/totalRows
1/4 = 0.25
Calculate the Remaining Space (Margin Space):
1.0
1.0 - (1.0 / totalRows)
1.0 - 0.25 = 0.75
Divide the Remaining Space by 2:
0.75/2 = 0.375