Winform Chart 通过X值取得曲线的Y值 一个SeriesPoint是由一个X坐标值和一个Y坐标值构成的,只要取得这个SeriesPoint就可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是介于两个SeriesPoint之间的值,怎么取? 两个SeriesPoint之间的话,X就没有特定的值啊,怎么根据X的值取Y的值。 可以取到特定的值,如果这样设置,就能在ChartAreaS上看到一个十字线,从这个十字线上就可以同时取到X和Y的值。但我只想获得两个Series与红线交叉点的对应值。chart.ChartAreas[0].CursorX.IsUserEnabled = true;chart.ChartAreas[0].CursorY.IsUserEnabled = true; 已经搞定,下面是代码: /// <summary> /// Set Cursor Position to Edit control. /// </summary> /// <param name="e"></param> /// <param name="axis"></param> /// <param name="position"></param> private void SetPosition(CursorEventArgs e, Axis axis, double position) { if (double.IsNaN(position)) { return; } if (axis.AxisName == AxisName.X) { RefreshBoilerAndHeat(); DateTime dateTimeX = DateTime.FromOADate(position); this._chartControl.labInfo.Text = "时间: " + dateTimeX.ToString("yyyy-MM-dd HH:mm:ss") + "\n\n"; for (int i = 0; i < this._chartControl.chart.Series.Count; i++ ) { Series series = this._chartControl.chart.Series[i]; DataPoint lastPoint = null; DataPoint nextPoint = null; for (int j = 0; j < series.Points.Count; j++) { DataPoint point = series.Points[j]; DateTime pointDateTime = DateTime.FromOADate(point.XValue); TimeSpan ts = new TimeSpan(); ts = dateTimeX - pointDateTime; if ((ts.TotalSeconds < 0 && j==0) || (ts.TotalSeconds >0 && j+1 == series.Points.Count)) { break; } if (ts.TotalSeconds < 0) { lastPoint = series.Points[j - 1]; nextPoint = point; break; } } if (lastPoint == null && nextPoint == null) { this._chartControl.labInfo.Text = "时间:" + dateTimeX.ToString("yyyy-MM-dd HH:mm:ss") + "\n\n数值:"; break; } else { double diff = (nextPoint.YValues[0] - lastPoint.YValues[0]) / (nextPoint.XValue - lastPoint.XValue); double yValue = diff * position - diff * lastPoint.XValue + lastPoint.YValues[0]; this._chartControl.labInfo.Text += series.Name + ": " + Math.Round(yValue,1).ToString() + "\n\n"; } } } } DateTime dateTimeX = DateTime.FromOADate(position);为什么能根据position拿到时间啊 能讲下原理吗 谢谢 我也遇到了,mousemove里怎么通过e.x获取到横坐标的值··· 像素值转用户值double yValue = chart_xxx.ChartAreas[x].AxisY.PixelPositionToValue(e.Y); asp中的 if then 等于c#中的哪个循环语句? 多窗体显示问题(SplitContainer) C#如何监控当前打印的页数? 如何从dll文件中读取已有的icon? 面试被问到的一个问题:你们是怎么做单元测试的?用什么单元测试工具了? listBox的SelectedIndexChanged事件没反应 怎样判断当前点的是哪个treeNode? .net精简版的Picture不支持jpg和gif的吗? 求大神帮忙解答这道题!!感谢! 谁有 socket 的 例子? 如何将对象转化为二进制字节流? help!!!
可以取到特定的值,如果这样设置,就能在ChartAreaS上看到一个十字线,从这个十字线上就可以同时取到X和Y的值。但我只想获得两个Series与红线交叉点的对应值。chart.ChartAreas[0].CursorX.IsUserEnabled = true;
chart.ChartAreas[0].CursorY.IsUserEnabled = true;
/// Set Cursor Position to Edit control.
/// </summary>
/// <param name="e"></param>
/// <param name="axis"></param>
/// <param name="position"></param>
private void SetPosition(CursorEventArgs e, Axis axis, double position)
{
if (double.IsNaN(position))
{
return;
} if (axis.AxisName == AxisName.X)
{
RefreshBoilerAndHeat(); DateTime dateTimeX = DateTime.FromOADate(position);
this._chartControl.labInfo.Text = "时间: " + dateTimeX.ToString("yyyy-MM-dd HH:mm:ss") + "\n\n"; for (int i = 0; i < this._chartControl.chart.Series.Count; i++ )
{
Series series = this._chartControl.chart.Series[i];
DataPoint lastPoint = null;
DataPoint nextPoint = null;
for (int j = 0; j < series.Points.Count; j++)
{
DataPoint point = series.Points[j];
DateTime pointDateTime = DateTime.FromOADate(point.XValue);
TimeSpan ts = new TimeSpan();
ts = dateTimeX - pointDateTime;
if ((ts.TotalSeconds < 0 && j==0) || (ts.TotalSeconds >0 && j+1 == series.Points.Count))
{
break;
} if (ts.TotalSeconds < 0)
{
lastPoint = series.Points[j - 1];
nextPoint = point;
break;
}
} if (lastPoint == null && nextPoint == null)
{
this._chartControl.labInfo.Text = "时间:" + dateTimeX.ToString("yyyy-MM-dd HH:mm:ss") + "\n\n数值:";
break;
}
else
{
double diff = (nextPoint.YValues[0] - lastPoint.YValues[0]) / (nextPoint.XValue - lastPoint.XValue);
double yValue = diff * position - diff * lastPoint.XValue + lastPoint.YValues[0];
this._chartControl.labInfo.Text += series.Name + ": " + Math.Round(yValue,1).ToString() + "\n\n";
}
}
}
}
DateTime dateTimeX = DateTime.FromOADate(position);
为什么能根据position拿到时间啊 能讲下原理吗 谢谢
double yValue = chart_xxx.ChartAreas[x].AxisY.PixelPositionToValue(e.Y);