VB.Net-系列中的第一个数据点在图表上打印到错误的x值
我正在开发一个类来管理图表的数据系列。但是,当我添加一个新系列时,如果第一个数据点的x值为0,则它在绘图上显示为x值为1。如果我添加一个额外的数据点,它似乎会自动更正。使用下面的代码,首先调用构造函数(显然),然后初始化(使用“Series1”、0,0之类的数据),然后再调用AddPoint。有人知道发生了什么吗 编辑: 从我发现的情况来看,每当序列只有一个数据点且该数据点的x值为0时,就会发生这种情况。在添加一个(或多个)具有非零Xvalue的数据点之前,该系列也无法正常工作。我的解决方法是,如果要添加的数据点的xValue为0,则将其xValue改为非常小(1x10^-150)。似乎有效,但在我的书中这仍然是一个奇怪的错误。我也找不到关于它的任何信息VB.Net-系列中的第一个数据点在图表上打印到错误的x值,.net,vb.net,charts,mschart,.net,Vb.net,Charts,Mschart,我正在开发一个类来管理图表的数据系列。但是,当我添加一个新系列时,如果第一个数据点的x值为0,则它在绘图上显示为x值为1。如果我添加一个额外的数据点,它似乎会自动更正。使用下面的代码,首先调用构造函数(显然),然后初始化(使用“Series1”、0,0之类的数据),然后再调用AddPoint。有人知道发生了什么吗 编辑: 从我发现的情况来看,每当序列只有一个数据点且该数据点的x值为0时,就会发生这种情况。在添加一个(或多个)具有非零Xvalue的数据点之前,该系列也无法正常工作。我的解决方法是,
Public Sub New(ByVal chartObj As Chart)
'Init m_chart
m_chart = chartObj
m_chart.BackColor = Color.Gainsboro
'Init Legend
m_legend = New Legend("Legend")
m_legend.Docking = Docking.Bottom
m_chart.Legends.Add(m_legend)
'Init m_chartArea
m_chartArea = New ChartArea("Default")
m_chartArea.BackColor = Color.Black
m_chartArea.AxisX.LabelStyle.Format = "{0:0.00}"
setXLimits(-10, 10)
setYLimits(-0.5, 0.5)
m_chartArea.AxisX.Title = "Position (mm)"
m_chartArea.AxisX.TitleFont = New Font("Arial", 10, FontStyle.Regular)
m_chartArea.AxisY.Title = "Peak-To-Peak (Volts)"
m_chartArea.AxisY.TitleFont = New Font("Arial", 10, FontStyle.Regular)
m_chartArea.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash
m_chartArea.AxisX.MajorGrid.LineColor = Color.DarkGreen
m_chartArea.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash
m_chartArea.AxisY.MajorGrid.LineColor = Color.DarkGreen
m_chart.ChartAreas.Add(m_chartArea)
'Init m_dataSeries
m_dataSeries = New List(Of Series)
'Init m_markerSeries
m_markerSeries = New Series("Peaking Markers")
m_markerSeries.ChartType = SeriesChartType.Point
m_markerSeries.MarkerColor = Color.Red
m_markerSeries.MarkerStyle = MarkerStyle.Triangle
m_markerSeries.MarkerSize = 10
m_chart.Series.Add(m_markerSeries)
'Init m_title
m_title = New Title("Plots")
m_title.Font = New Font("Arial", 20, FontStyle.Regular)
m_chart.Titles.Add(m_title)
End Sub
Public Sub Initialize(ByVal Legend As String, ByVal xVal As Double, ByVal yVal As Double)
Dim temp As New Series(Legend)
temp.ChartType = SeriesChartType.Line
temp.Points.Clear()
If nextAxis = "X" Then
temp.Color = xColor
nextAxis = "Y"
Else
temp.Color = yColor
nextAxis = "X"
End If
temp.MarkerStyle = MarkerStyle.Circle
m_dataSeries.Add(temp)
m_chart.Series.Add(temp)
AddPoint(xVal, yVal)
End Sub
Public Sub AddPoint(ByVal x As Double, ByVal y As Double)
If m_chart.InvokeRequired Then
m_chart.Invoke(New Action(Of Double, Double)(AddressOf AddPoint), x, y)
Else
Dim temp As New DataPoint(x, y)
m_dataSeries.Item(m_dataSeries.Count - 1).Points.Add(temp)
End If
End Sub
尝试更改此选项:
If m_chart.InvokeRequired Then
m_chart.Invoke(New Action(Of Double, Double)(AddressOf AddPoint), x, y)
Else
Dim temp As New DataPoint(x, y)
m_dataSeries.Item(m_dataSeries.Count - 1).Points.Add(temp)
End If
为此:
If m_chart.InvokeRequired Then
m_chart.Invoke(New Action(Of Double, Double)(AddressOf AddPoint), x, y)
End If
Dim temp As New DataPoint(x, y)
m_dataSeries.Item(m_dataSeries.Count - 1).Points.Add(temp)
2017年8月,.net Framework 4.5.2,仍然存在相同的错误 我创建了一个气泡图,当我添加一个点时:
Chart1.Series("MySeries").AddXY(0,0,value)
奇怪:该点显示在位置(1,0)而不是(0,0)处
但如果我加上不止一点,它是正确的
所以,我的技巧是相似的,当我只有一个点时,我加两次那个点,加上一个极小的偏移量,知道它会被真实的东西掩盖。。。
不太好,这是作弊,但它“解决”了我的问题
Chart1.Series("MySeries").AddXY(0.000001,0,0)
Chart1.Series("MySeries").AddXY(0,0,10)
任何其他建议:欢迎