Scichart简单做图范例三 (改变已有的曲线)

改变曲线图,不是那么简单

因为曲线可能是点图,也可能是折线图,所以形式参数必须是他们的父类:BaseRenderableSeries 

改变某条曲线上的某个点:

//修改某条曲线上某个点的数据       传递父类数据类型
public void 改变图上数据(BaseRenderableSeries series, int index, double newValue)
{
    // 获取数据序列并进行类型检查和转换
    var dataSeries = series.DataSeries as XyDataSeries<int, double>;
    if (dataSeries == null)
    {
        throw new ArgumentException("必须是Int, double类型");
    }

    // 修改数据序列中的值
    dataSeries.Update(index, newValue);

    // 将修改后的数据序列重新设置给RenderableSeries
    series.DataSeries = dataSeries;
}

一次性多改几个点呢?

修改多个数据点:

public void 修改多个数据点(BaseRenderableSeries series, List<Tuple<int, double>> points)
{
    // 获取旧的数据序列并进行类型检查和转换
    var oldDataSeries = series.DataSeries as XyDataSeries<int, double>;
    if (oldDataSeries == null)
    {
        throw new ArgumentException("DataSeries must be of type XyDataSeries<int, double>.");
    }

    // 创建新的数据序列
    var newDataSeries = new XyDataSeries<int, double>();

    // 将旧的数据序列中的数据复制到新的数据序列中,并在复制过程中修改适当的数据点
    int j = 0;
    for (int i = 0; i < oldDataSeries.Count; i++)
    {
        if (j < points.Count && points[j].Item1 == i)
        {
            newDataSeries.Append(oldDataSeries.XValues[i], points[j].Item2);
            j++;
        }
        else
        {
            newDataSeries.Append(oldDataSeries.XValues[i], oldDataSeries.YValues[i]);
        }
    }

    // 将新的数据序列设置给RenderableSeries
    series.DataSeries = newDataSeries;
}

修改多个数据点(lineSeries1, new List<Tuple<int, double>> { Tuple.Create(1, 33.333), Tuple.Create(3, 66.666), Tuple.Create(5, 99.999) });

这将修改lineSeries1的第二个、第四个和第六个数据点的Y值,新的Y值分别为33.333,66.666和99.999。注意,索引是从0开始的,所以第二个数据点的索引是1,第四个数据点的索引是3,第六个数据点的索引是5。

插入新的数据点:

public void 插入新的数据点(BaseRenderableSeries series, int index, int xValue, double yValue)
{
    // 获取旧的数据序列并进行类型检查和转换
    var oldDataSeries = series.DataSeries as XyDataSeries<int, double>;
    if (oldDataSeries == null)
    {
        throw new ArgumentException("必须是 XyDataSeries<int, double>.");
    }

    // 创建新的数据序列
    var newDataSeries = new XyDataSeries<int, double>();

    // 将旧的数据序列中的数据复制到新的数据序列中,并在适当的位置插入新的数据点
    for (int i = 0; i < oldDataSeries.Count; i++)
    {
        if (i == index)
        {
            newDataSeries.Append(xValue, yValue);
        }
        newDataSeries.Append(oldDataSeries.XValues[i], oldDataSeries.YValues[i]);
    }

    // 如果新的数据点应该添加在末尾
    if (index >= oldDataSeries.Count)
    {
        newDataSeries.Append(xValue, yValue);
    }

    // 将新的数据序列设置给RenderableSeries
    series.DataSeries = newDataSeries;
}

 例: 插入新的数据点(lineSeries1, 1, 100, 33.333);
 

插入多个点:

比如:插入多个数据点

插入多个数据点(lineSeries1, new List<Tuple<int, int, double>> 
{ Tuple.Create(1, 100, 33.333), Tuple.Create(3, 200, 66.666), Tuple.Create(5, 300, 99.999) });

这将在lineSeries1的第二个、第四个和第六个数据点之前插入新的数据点,新的数据点的X值和Y值分别为(100, 33.333),(200, 66.666)和(300, 99.999)。注意,索引是从0开始的,所以第二个数据点的索引是1,第四个数据点的索引是3,第六个数据点的索引是5。

public void 插入多个数据点(BaseRenderableSeries series, List<Tuple<int, int, double>> points)
{
    // 获取旧的数据序列并进行类型检查和转换
    var oldDataSeries = series.DataSeries as XyDataSeries<int, double>;
    if (oldDataSeries == null)
    {
        throw new ArgumentException("DataSeries must be of type XyDataSeries<int, double>.");
    }

    // 创建新的数据序列
    var newDataSeries = new XyDataSeries<int, double>();

    // 将旧的数据序列中的数据复制到新的数据序列中,并在适当的位置插入新的数据点
    int j = 0;
    for (int i = 0; i < oldDataSeries.Count; i++)
    {
        while (j < points.Count && points[j].Item1 == i)
        {
            newDataSeries.Append(points[j].Item2, points[j].Item3);
            j++;
        }
        newDataSeries.Append(oldDataSeries.XValues[i], oldDataSeries.YValues[i]);
    }

    // 如果新的数据点应该添加在末尾
    while (j < points.Count)
    {
        newDataSeries.Append(points[j].Item2, points[j].Item3);
        j++;
    }

    // 将新的数据序列设置给RenderableSeries
    series.DataSeries = newDataSeries;
}

删除数据:

public void 删除数据点(BaseRenderableSeries series, int index)
{
    // 获取旧的数据序列并进行类型检查和转换
    var oldDataSeries = series.DataSeries as XyDataSeries<int, double>;
    if (oldDataSeries == null)
    {
        throw new ArgumentException("DataSeries must be of type XyDataSeries<int, double>.");
    }

    // 创建新的数据序列
    var newDataSeries = new XyDataSeries<int, double>();

    // 将旧的数据序列中的数据复制到新的数据序列中,并在复制过程中跳过要删除的数据点
    for (int i = 0; i < oldDataSeries.Count; i++)
    {
        if (i != index)
        {
            newDataSeries.Append(oldDataSeries.XValues[i], oldDataSeries.YValues[i]);
        }
    }

    // 将新的数据序列设置给RenderableSeries
    series.DataSeries = newDataSeries;
}

 例:删除数据点(lineSeries1, 1);

删除多个点

public void 删除多个数据点(BaseRenderableSeries series, List<int> indices)
{
    // 获取旧的数据序列并进行类型检查和转换
    var oldDataSeries = series.DataSeries as XyDataSeries<int, double>;
    if (oldDataSeries == null)
    {
        throw new ArgumentException("DataSeries must be of type XyDataSeries<int, double>.");
    }

    // 创建新的数据序列
    var newDataSeries = new XyDataSeries<int, double>();

    // 将旧的数据序列中的数据复制到新的数据序列中,并在复制过程中跳过要删除的数据点
    for (int i = 0; i < oldDataSeries.Count; i++)
    {
        if (!indices.Contains(i))
        {
            newDataSeries.Append(oldDataSeries.XValues[i], oldDataSeries.YValues[i]);
        }
    }

    // 将新的数据序列设置给RenderableSeries
    series.DataSeries = newDataSeries;
}

  例:删除多个数据点(lineSeries1, new List<int> { 1, 3, 5 });

这将从lineSeries1中删除第二个、第四个和第六个数据点。注意,索引是从0开始的,所以第二个数据点的索引是1,第四个数据点的索引是3,第六个数据点的索引是5。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值