图表系列First Derivative

时间:2018-06-13 16:31:21

标签: c# charts data-visualization derivative

我正在使用System.Windows.Forms.DataVisualization.Charting绘制图表我已经用一堆x和y点填充了该系列,我希望能够绘制衍生图。有谁知道一个简单的方法吗?

或者,如果有办法获得一组xy点的相应功能也会有所帮助。

谢谢。

系列人口:

chart_TitrationData.ChartAreas[0].AxisX.Title = "Volume (mL)";
chart_TitrationData.ChartAreas[0].AxisY.Title = "pH";
chart_TitrationData.Series.Add(_SelectedTitration.TitrationID);        
chart_TitrationData.Series[_SelectedTitration.TitrationID].ChartType = SeriesChartType.Spline;          
chart_TitrationData.Series[_SelectedTitration.TitrationID].MarkerStyle = MarkerStyle.Circle;              
chart_TitrationData.Series[_SelectedTitration.TitrationID].XValueType = ChartValueType.Double;           
chart_TitrationData.Series[_SelectedTitration.TitrationID].YValueType = ChartValueType.Double;         
chart_TitrationData.Series[_SelectedTitration.TitrationID].IsVisibleInLegend = true;
foreach (var data in _SelectedTitration.TitrationData)
{     
    chart_TitrationData.Series[_SelectedTitration.TitrationID].Points.AddXY(data.XPoint, data.YPoint);
}

1 个答案:

答案 0 :(得分:1)

内置Statistical Formulas但衍生品没有。甚至在其他函数类中,Financial Formulas

也没有

所以你必须自己计算一下。

对于给定的Series s0,可以根据差异计算一阶导数:

for (int i = 1; i < s0.Points.Count; i++)
{
    s1.Points.AddXY(s0.Points[i].XValue, (s0.Points[i].YValues[0] - 
                                          s0.Points[i-1].YValues[0]) / scale);
}

这个简单的测试......:

double scale = 100;
for (int i = 0; i < 1000; i++)
{
    s0.Points.AddXY(i, Math.Sin(i / scale)); 
}

结果,正如所料......:

enter image description here

如果x值的间距不是那么均匀,则应通过各个步骤潜水来计算全差值商数:

double step = s0.Points[i].XValue -  s0.Points[i-1].XValue;

另外:以上是略微简化。为了更好的精度,应该使用x-step / 2和x + step / 2作为具有相应内插y值的x值。并且省略了s2中的第一个和最后一个点。