Hi,
I have data that I need to present in a linechart. Some values are actual, and some are estimated. I have a DataSource column in my table that is set to 'A' for actual or 'E' for estumated.
I would like to use different shapes for data points on my chart depending on the value of DataSource. Could you please explain how to do this.
Thanks,
Helen.
Helen,
Are you using a ScatterChart with ConnectWithLines set to "true"? Or are you actually using a LineChart?
Would it be possible for you to attach a screen shot of a chart with sample data in it showing exactly what you want to do?
Michael S.
Have you been able to resolve this issue? If you still require assistance please refer to my previouls reply asking for more details which would help me investigate this issue further.
Hi Mike,
I was unable to resolve this.
I am trying to create a linechart, and assign different shapes to different datapoints depending on a value of a status column.
I attached my chart where I drew some circles and squares around different data points to illustrate what I am trying to do.
Here is the code
ucChart.Data.DataSource = dt
ucChart.Data.SwapRowsAndColumns = True
ucChart.ChartType = Infragistics.UltraChart.Shared.Styles.ChartType.LineChart
ucChart.LineChart.TreatDateTimeAsString = False
ucChart.LineChart.NullHandling = Infragistics.UltraChart.Shared.Styles.NullHandling.DontPlot
'set wording on the chart
ucChart.Axis.X.Labels.Orientation = Infragistics.UltraChart.Shared.Styles.TextOrientation.Horizontal
ucChart.Axis.X.Labels.ItemFormatString = "<ITEM_LABEL:MM/dd/yyyy>"
ucChart.Axis.Y.Labels.Orientation = Infragistics.UltraChart.Shared.Styles.TextOrientation.Horizontal
ucChart.TitleTop.Text = "Inventory History For " & dt.Rows(0).Item("productDesc")
ucChart.TitleTop.Font = New System.Drawing.Font("Ariel", 14.0F, FontStyle.Bold)
ucChart.TitleTop.Visible = True
ucChart.TitleBottom.Text = "Inventory Date"
ucChart.TitleBottom.Font = New System.Drawing.Font("Ariel", 8.5F, FontStyle.Regular) '
ucChart.TitleBottom.Visible = True
ucChart.Data.DataBind()
The only way to do this is to handle FillSceneGraph event and overlay symbol icons on top of existing line points.
Private Sub UltraChart1_FillSceneGraph(ByVal sender As System.Object, ByVal e As Infragistics.UltraChart.Shared.Events.FillSceneGraphEventArgs) Handles UltraChart1.FillSceneGraph Dim shapeArray As New ArrayList Dim line As Polyline
shapeArray.Add("A") shapeArray.Add("E") shapeArray.Add("E") shapeArray.Add("A") shapeArray.Add("E")
For Each p As Primitive In e.SceneGraph If TypeOf p Is Polyline Then line = CType(p, Polyline) Next
If line Is Nothing Then Exit Sub
For i As Integer = 0 To line.points.Length - 1 Dim s As New Symbol If shapeArray(i) = "A" Then s.icon = SymbolIcon.Circle Else s.icon = SymbolIcon.Square End If
s.iconSize = SymbolIconSize.Large s.point = line.points(i).point e.SceneGraph.Add(s) Next End Sub
Thanks a lot Max. It works perfectly well. I posted a snap shot of the graph.
I have two more questions though.
How can I make data point labels to be drawn a bit above the actual data points so that my shapes do not obscure the values?
How can I tell the graph that the minimum interval is one day? Otherwise it makes intevals half a day which results in redundant x-axis labels.
Thanks in advance for your help.
The date interval can be adjusted this way, provided you are using actual dates and not strings:UltraChart1.Axis.X.TickmarkStyle = AxisTickStyle.DataIntervalUltraChart1.Axis.X.TickmarkInterval = 1UltraChart1.Axis.X.TickmarkIntervalType = AxisIntervalType.Days
If you need to extend the position of the label beyond what VerticalAlignment.Far on your ChartText items gives you (which isn't much), you can add this to your FillSceneGraph, inside the foreach loop:If TypeOf p Is Text And p.Path Is Nothing Then Dim label As Text = CType(p, Text) label.bounds.Y -= 10End If
Yes, thank you Michael.
Is everything working for you now?
Thanks Max. Apparently I am using an outdated version. I will get the latest one, and implement your advise.
Thanks again for your timely responses.
Helen
each axis label will have a Path that is set to something like "Border.Title.Grid.X", so the condition would be false. Please make sure that you're using the latest build of NetAvantage, as I recall this being a problem in the past.
Mike, there is a slight problem with the solution below:
If TypeOf p Is Text And p.Path Is Nothing Then Dim label As Text = CType(p, Text) label.bounds.Y -= 10End If
All the labels move up, not just the labels of the graph. It includes the labels of the axis. The labels of the X axis end up in the middle of the axis line. I was unable to figure out how to tell the axis labels from the graph labels.
I would really appreciate your help in this.
Thanks