本人最近在使用zedgraph绘制曲线图,具体情况如下:通过串口通讯,接收数据,然后根据协议对接收的数据解包,把需要绘制成曲线的数据填充到曲线上;
目前已把需要填充的数据复制,但是不知道怎么由点绘成曲线(运行后没有曲线,不知道怎么修改)想请教一下大家
下面是我的解包与曲线的显示的主要代码:(协议中表示,根据帧头帧尾确定一帧数据的大小,其中帧数据会显示曲线的个数:例如:接收3个实际需要填充为曲线的数据,就是绘制3个曲线)
```c#
//全局变量中的初始化
RollingPointPairList[] point = new RollingPointPairList[12];
GraphPane myPane;
string[] curveTitles = {"CH1","CH2","CH3","CH4","CH5","CH6","CH7","CH8","CH9","CH10","CH11","CH12"};
Color[] colors = {Color.Red,Color.Green,Color.Yellow,Color.Pink,Color.Red,Color.Red,Color.Red,Color.Red,Color.Red,Color.Red,Color.Red,Color.Red};
ZedGraph.SymbolType[] symbox = {SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None,SymbolType.None};
double X_Value;
//初始化图形
private void InitPlot()
{
myPane = zgc.GraphPane;
for(int k = 0;k < myPane.YAxisList.Count;k++)
{
YAxis y_axis = myPane.YAxisList[k];
y_axis.Title.Text = curveTitles[k];
y_axis.Color = colors[k];
}
myPane.CurveList[0] = myPane.AddCurve("CH1",point[0],colors[0],symbox[0]);
myPane.CurveList[1] = myPane.AddCurve("CH2",point[1],colors[1],symbox[1]);
myPane.CurveList[2] = myPane.AddCurve("CH3",point[2],colors[2],symbox[2]);
myPane.CurveList[3] = myPane.AddCurve("CH4",point[3],colors[3],symbox[3]);
myPane.CurveList[4] = myPane.AddCurve("CH5",point[4],colors[4],symbox[4]);
myPane.CurveList[5] = myPane.AddCurve("CH6",point[5],colors[5],symbox[5]);
myPane.CurveList[6] = myPane.AddCurve("CH7",point[6],colors[6],symbox[6]);
myPane.CurveList[7] = myPane.AddCurve("CH8",point[7],colors[7],symbox[7]);
myPane.CurveList[8] = myPane.AddCurve("CH9",point[8],colors[8],symbox[8]);
myPane.CurveList[9] = myPane.AddCurve("CH10",point[9],colors[9],symbox[9]);
myPane.CurveList[10] = myPane.AddCurve("CH11",point[10],colors[10],symbox[10]);
myPane.CurveList[11] = myPane.AddCurve("CH12",point[11],colors[11],symbox[11]);
}
//解包执行代码,填充数据到图形
public void DisPlay(float[] PData)
{//PData里面是接收的一帧数据中需要显示到曲线上的数据,PData的长度决定曲线的个数
float[] Y_Value = new float[12];
for(int x = 0;x < pData.lenght;x++)
{
X_Value = (double)x; //X_Value是全局变量,X轴数据
Y_Value[x] = PData[x];//Y轴值
point[x] = new RollingPointPairList[100];
point[x].Add(X_Value,Y_Value[x]);
}
if(point[x].Count > 100)
{
point[x].RemoveAt(0);
}
zgc.AxisChange();
zgc.Invalidate();
zgc.Refresh();
}
```