【发布时间】:2014-06-20 16:02:49
【问题描述】:
我有一个包含两个系列的图表。现在我想找到给定间隔内沿 x 轴的聊天之间的最大距离。为了解决这个问题,计算给定 x 点上的距离(如图片中 x=50 处)就足够了。
我有以下代码:
public void MaxSpacing(object chart, int series1, int series2)
{
Chart tmpChart = (Chart)chart;
double distance = 0;
int positon = 0;
for (int i = 0; i < tmpChart.Series[series1].Points.Count(); i++)
{
if ((Math.Abs(tmpChart.Series[series1].Points[i].YValues[0] - tmpChart.Series[series2].Points[i].YValues[0])) > distance)
{
distance = tmpChart.Series[series1].Points[i].YValues[0] - tmpChart.Series[series2].Points[i].YValues[0];
}
}
此代码的问题在于,它使用了两个系列的数据点。如果 series1 和 series2 中点的数量/间隔不同,则计算不起作用。所以我正在寻找给定 X 值上的 Y 值来计算距离。
【问题讨论】:
-
听起来像线性插值,只是通过点连接线。你可以做更多花哨的抛物线(样条拟合),但很有可能线性插值就足够了。
-
据我所知,您希望在给定两个 X 值的情况下找到 Y 值的最大差异。我认为这意味着您正在检查的两个点必须具有相同的 X 值。因此,比较每个系列中的点数,并遍历系列中点数最少的点。还要确保您比较的两个点具有相同的 X 值。 // 如果你想变得花哨,你可以使用回归技术从点数较少的系列中找到“缺失”的 X 值,然后使用回归中的函数生成 Y 值,然后进行比较。
-
您是说要处理两个系列之间数据点数量不同的情况吗?如果需要,您想在两点之间进行插值,以得出一个与其他系列进行比较的值?
-
我没有得到 "Points[i].YValues[0]" 一个点如何有多个 y 值?
-
@Dennis_E 在这种情况下,每个点 i 都有一个 y 值,并且有两个系列,所以你有两个可以减去的 y 值
标签: c# charts distance mschart series