改变曲线图,不是那么简单
因为曲线可能是点图,也可能是折线图,所以形式参数必须是他们的父类: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。