从C#windows窗体应用程序图计算值
我正在进行热测试,其中有3个设定值(带+/1C)需要确认。 设定点为从C#windows窗体应用程序图计算值,c#,.net,winforms,math,statistics,C#,.net,Winforms,Math,Statistics,我正在进行热测试,其中有3个设定值(带+/1C)需要确认。 设定点为 37C 60摄氏度 80摄氏度 我已经创建了一个Windows窗体应用程序,可以从“CSV”文件上载数据并在应用程序上打印。 如何计算每个设定点范围的平均值、最小值和最大值? (标记的红色框不是来自应用程序) 是否有方法确定每个设定点的中心点,并在中间两侧2.5分钟之间进行计算 CSV数据如下所示 任何有助于我朝正确方向发展的意见都将不胜感激 很抱歉回复太晚。 我已经用代码和CSV数据链接更新了问题 using Syste
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Windows.Forms.DataVisualization.Charting;
namespace TBE_Temperature_Contral_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CHART_CH1.MouseWheel += CHART_CH1_MouseWheel;
CHART_CH2.MouseWheel += CHART_CH2_MouseWheel;
}
private void BTN_Load_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog
{
InitialDirectory = @"C:\temp",// object of file dialog sent to open file to default c drive
Title = "Browse txt File",// text to show on the bar
CheckFileExists = true,// check whether file exit
CheckPathExists = true,//check file path
DefaultExt = "txt",// the file default extensio
Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",//filter by default to only txt files
FilterIndex = 2,
RestoreDirectory = true,
ReadOnlyChecked = true,
ShowReadOnly = true
};//creation and inialization of open file dialog
if (openFileDialog1.ShowDialog() == DialogResult.OK)// prompt for a file dialog
{
string SourcePath = openFileDialog1.FileName;
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[10] { new DataColumn("No."), new DataColumn("Data"), new DataColumn("Time"), new DataColumn("ID"), new DataColumn("CH1"), new DataColumn("Type_1"), new DataColumn("Unit_1"), new DataColumn("CH2"), new DataColumn("Type_2"), new DataColumn("Unit_2") });
List<string> list = new List<string>();
using (StreamReader sr = new StreamReader(SourcePath))
{
while (sr.Peek() >= 0)
{
list.Add(sr.ReadLine());
}
}
for (int i = 1; i < list.Count; i++)
{
string[] strlist = list[i].Split('\t');
dt.Rows.Add(strlist[0], strlist[1], strlist[2], strlist[3], strlist[4], strlist[5], strlist[6], strlist[7], strlist[8], strlist[9]);
}
var filteredCH136 = dt.AsEnumerable()
.Where(r => r.Field<string>("CH1").Contains("36"));
//dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
string FirstCH136 = (from DataRow dr in dt.Rows
where (string)dr["CH1"] == "36"
select (string)dr["No."]).FirstOrDefault();
label1.Text = FirstCH136.ToString();
var filteredCH138 = dt.AsEnumerable()
.Where(r => r.Field<string>("CH1").Contains("38"));
//dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
string FirstCH138 = (from DataRow dr in dt.Rows
where (string)dr["CH1"] == "38"
select (string)dr["No."]).FirstOrDefault();
label2.Text = FirstCH138.ToString();
CHART_CH1.Series.Add("CH1_36_38");
CHART_CH1.Series.Add("CH1");
CHART_CH2.Series.Add("CH2");
CHART_CH1.Series["CH1_36_38"].ChartType = SeriesChartType.Line;
CHART_CH1.Series["CH1"].ChartType = SeriesChartType.Line;
CHART_CH1.Series["CH1"].Color = Color.Orange;
CHART_CH2.Series["CH2"].ChartType = SeriesChartType.Line;
CHART_CH2.Series["CH2"].Color = Color.Blue;
//CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH136), 36);
//CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH138), 38);
CHART_CH1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
CHART_CH1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
CHART_CH2.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
CHART_CH2.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
CHART_CH1.DataSource = dt;
CHART_CH2.DataSource = dt;
CHART_CH1.Series["CH1"].XValueMember ="No.";
CHART_CH1.Series["CH1"].YValueMembers = "CH1";
CHART_CH2.Series["CH2"].XValueMember = "No.";
CHART_CH2.Series["CH2"].YValueMembers = "CH2";
//databind
CHART_CH1.DataBind();
CHART_CH2.DataBind();
}
}
private void CHART_CH1_MouseEnter(object sender, EventArgs e)
{
if (!CHART_CH1.Focused)
CHART_CH1.Focus();
}
private void CHART_CH2_MouseEnter(object sender, EventArgs e)
{
if (!CHART_CH2.Focused)
CHART_CH2.Focus();
}
private void CHART_CH1_MouseLeave(object sender, EventArgs e)
{
if (CHART_CH1.Focused)
CHART_CH1.Parent.Focus();
}
private void CHART_CH2_MouseLeave(object sender, EventArgs e)
{
if (CHART_CH2.Focused)
CHART_CH2.Parent.Focus();
}
private void CHART_CH1_MouseWheel(object sender, MouseEventArgs e)
{
var chart = (Chart)sender;
var xAxis = chart.ChartAreas[0].AxisX;
var yAxis = chart.ChartAreas[0].AxisY;
try
{
if (e.Delta < 0) // Scrolled down.
{
xAxis.ScaleView.ZoomReset();
yAxis.ScaleView.ZoomReset();
}
else if (e.Delta > 0) // Scrolled up.
{
var xMin = xAxis.ScaleView.ViewMinimum;
var xMax = xAxis.ScaleView.ViewMaximum;
var yMin = yAxis.ScaleView.ViewMinimum;
var yMax = yAxis.ScaleView.ViewMaximum;
var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
xAxis.ScaleView.Zoom(posXStart, posXFinish);
yAxis.ScaleView.Zoom(posYStart, posYFinish);
}
}
catch { throw; }
}
private void CHART_CH2_MouseWheel(object sender, MouseEventArgs e)
{
var chart = (Chart)sender;
var xAxis = chart.ChartAreas[0].AxisX;
var yAxis = chart.ChartAreas[0].AxisY;
try
{
if (e.Delta < 0) // Scrolled down.
{
xAxis.ScaleView.ZoomReset();
yAxis.ScaleView.ZoomReset();
}
else if (e.Delta > 0) // Scrolled up.
{
var xMin = xAxis.ScaleView.ViewMinimum;
var xMax = xAxis.ScaleView.ViewMaximum;
var yMin = yAxis.ScaleView.ViewMinimum;
var yMax = yAxis.ScaleView.ViewMaximum;
var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
xAxis.ScaleView.Zoom(posXStart, posXFinish);
yAxis.ScaleView.Zoom(posYStart, posYFinish);
}
}
catch { throw; }
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.IO;
使用System.Windows.Forms.DataVisualization.Charting;
名称空间温度控制试验
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
CHART_CH1.mouseweel+=CHART_CH1_mouseweel;
CHART_CH2.mouseweel+=CHART_CH2_mouseweel;
}
私有无效BTN\u加载\u单击(对象发送方,事件参数e)
{
OpenFileDialog openFileDialog1=新建OpenFileDialog
{
InitialDirectory=@“C:\temp”,//发送文件对话框的对象以将文件打开到默认C驱动器
Title=“Browse txt File”,//要在栏上显示的文本
CheckFileExists=true,//检查文件是否退出
CheckPathExists=true,//检查文件路径
DefaultExt=“txt”,//文件默认扩展名
Filter=“Text files(*.txt)|*.txt |所有文件(*.*)|*.*”,//默认情况下仅筛选txt文件
FilterIndex=2,
RestoreDirectory=true,
ReadOnlyChecked=true,
ShowReadOnly=true
};//打开文件对话框的创建和初始化
if(openFileDialog1.ShowDialog()==DialogResult.OK)//提示输入文件对话框
{
字符串SourcePath=openFileDialog1.FileName;
DataTable dt=新的DataTable();
AddRange(新数据列[10]{新数据列(“编号”)、新数据列(“数据”)、新数据列(“时间”)、新数据列(“ID”)、新数据列(“CH1”)、新数据列(“Type_1”)、新数据列(“Unit_1”)、新数据列(“CH2”)、新数据列(“Type_2”)、新数据列(“Unit_2”)};
列表=新列表();
使用(StreamReader sr=新的StreamReader(SourcePath))
{
而(sr.Peek()>=0)
{
list.Add(sr.ReadLine());
}
}
for(int i=1;ir.Field(“CH1”)。包含(“36”);
//dt.DefaultView.RowFilter=“否,如“%”“+”36“+”%”;
字符串FirstCH136=(来自dt.Rows中的DataRow dr
其中(字符串)dr[“CH1”]=“36”
选择(字符串)dr[“No.”]).FirstOrDefault();
label1.Text=FirstCH136.ToString();
var filteredCH138=dt.AsEnumerable()
其中(r=>r.Field(“CH1”)包含(“38”);
//dt.DefaultView.RowFilter=“否,如“%”“+”36“+”%”;
字符串FirstCH138=(来自dt.Rows中的数据行dr
其中(字符串)dr[“CH1”]=“38”
选择(字符串)dr[“No.”]).FirstOrDefault();
label2.Text=FirstCH138.ToString();
图表1.系列。添加(“CH1\U 36\U 38”);
图1.系列添加(“CH1”);
图2.系列添加(“CH2”);
CHART_CH1.系列[“CH1_36_38”]。ChartType=系列ChartType.Line;
CHART_CH1.系列[“CH1”]。ChartType=系列ChartType.Line;
CHART_CH1.系列[“CH1”]。颜色=颜色。橙色;
CHART_CH2.系列[“CH2”]。ChartType=系列ChartType.Line;
CHART_CH2.系列[“CH2”]。颜色=颜色。蓝色;
//CHART_CH1.Series[“CH1_36_38”].Points.AddXY(float.Parse(FirstCH136),36);
//CHART_CH1.Series[“CH1_36_38”].Points.AddXY(float.Parse(FirstCH138),38);
CHART_CH1.ChartAreas[0]。AxisX.ScaleView.Zoomable=true;
CHART_CH1.ChartAreas[0]。AxisY.ScaleView.Zoomable=true;
CHART_CH2.ChartAreas[0]。AxisX.ScaleView.Zoomable=true;
CHART_CH2.ChartAreas[0]。AxisY.ScaleView.Zoomable=true;
图表1.DataSource=dt;
图表2.DataSource=dt;
图表_CH1.系列[“CH1”]。XValueMember=“编号”;
图表_CH1.系列[“CH1”]。YValueMembers=“CH1”;
CHART_CH2.系列[“CH2”].XValueMember=“编号”;
CHART_CH2.Series[“CH2”].YValueMembers=“CH2”;
//数据绑定
图表_CH1.DataBind();
图表_CH2.DataBind();
}
}
私有无效图表\u CH1\u鼠标指针(对象发送方,事件参数e)
{
如果(!图表_CH1.Focused)
图表_CH1.Focus();
}
私有无效图表\u CH2\u鼠标指针(对象发送方,事件参数e)
{
如果(!图表2.聚焦)
图表_CH2.Focus();
}
私有无效图表\u CH1\u MouseLeave(对象发送方,事件参数e)
{
如果(图1.聚焦)
图表_CH1.Parent.Focus();
}
私有无效图表\u CH2\u MouseLeave(对象发送方,事件参数e)
{
如果(图2.聚焦)
CHART_CH2.Parent.Focus();
}
私有无效图表\u CH1\u鼠标滚轮(对象发送器,鼠标指针e)
double minvalue = listname.Min();
double maxvalue = listname.Max();
double avgvalue = listname.Average();
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace TBE_Temperature_Contral_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CHART_CH1.MouseWheel += CHART_CH1_MouseWheel;
CHART_CH2.MouseWheel += CHART_CH2_MouseWheel;
}
private void BTN_Load_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog
{
InitialDirectory = @"D:\TestData",// object of file dialog sent to open file to default c drive
Title = "Browse txt File",// text to show on the bar
CheckFileExists = true,// check whether file exit
CheckPathExists = true,//check file path
DefaultExt = "txt",// the file default extensio
Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",//filter by default to only txt files
FilterIndex = 2,
RestoreDirectory = true,
ReadOnlyChecked = true,
ShowReadOnly = true
};//creation and inialization of open file dialog
if (openFileDialog1.ShowDialog() == DialogResult.OK)// prompt for a file dialog
{
string SourcePath = openFileDialog1.FileName;
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[10] { new DataColumn("No."), new DataColumn("Data"), new DataColumn("Time"), new DataColumn("ID"), new DataColumn("CH1"), new DataColumn("Type_1"), new DataColumn("Unit_1"), new DataColumn("CH2"), new DataColumn("Type_2"), new DataColumn("Unit_2") });
List<string> list = new List<string>();
using (StreamReader sr = new StreamReader(SourcePath))
{
while (sr.Peek() >= 0)
{
//MessageBox.Show(sr.ReadLine());
list.Add(sr.ReadLine());
}
}
for (int i = 1; i < list.Count; i++)
{
string[] strlist = list[i].Split(',');
dt.Rows.Add(strlist[0], strlist[1], strlist[2], strlist[3], strlist[4], strlist[5], strlist[6], strlist[7], strlist[8], strlist[9]);
}
var filteredCH136 = dt.AsEnumerable()
.Where(r => r.Field<string>("CH1").Contains("36"));
//dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
string FirstCH136 = (from DataRow dr in dt.Rows
where (string)dr["CH1"] == "36"
select (string)dr["No."]).FirstOrDefault();
label1.Text = FirstCH136.ToString();
var filteredCH138 = dt.AsEnumerable()
.Where(r => r.Field<string>("CH1").Contains("38"));
//dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
string FirstCH138 = (from DataRow dr in dt.Rows
where (string)dr["CH1"] == "38"
select (string)dr["No."]).FirstOrDefault();
label2.Text = FirstCH138.ToString();
CHART_CH1.Series.Add("CH1_36_38");
string FirstCH137 = (from DataRow dr in dt.Rows
where (string)dr["CH1"] == "37"
select (string)dr["No."]).FirstOrDefault();
string BefNO = (Convert.ToInt32(FirstCH137) - 150).ToString();//Two minutes is 150 seconds
string AftNo = (Convert.ToInt32(FirstCH137) + 150).ToString();
int TmpNum = Convert.ToInt32(AftNo) - Convert.ToInt32(BefNO) +1;
IEnumerable<double> tmp = (from DataRow dr in dt.Rows
where Convert.ToInt32(dr["No."]) >= Convert.ToInt32(BefNO) && Convert.ToInt32(dr["No."]) <= Convert.ToInt32(AftNo)
orderby Convert.ToDouble(dr["CH1"]) descending
select Convert.ToDouble(dr["CH1"]));
double min =tmp.FirstOrDefault();
double max =tmp.LastOrDefault();
IEnumerable<double> TmpSum = (from DataRow dr in dt.Rows
where Convert.ToInt32(dr["No."]) >= Convert.ToInt32(BefNO) && Convert.ToInt32(dr["No."]) <= Convert.ToInt32(AftNo)
select Convert.ToDouble(dr["CH1"]));
double sum = 0;
foreach (var v in TmpSum)
{
sum += v;
}
label3.Text = string.Format("{0:F2}", sum / TmpNum);//Average value
label4.Text = min.ToString();//Max value
label5.Text = max.ToString();//Min value
CHART_CH1.Series.Add("CH1");
CHART_CH2.Series.Add("CH2");
CHART_CH1.Series["CH1_36_38"].ChartType = SeriesChartType.Line;
CHART_CH1.Series["CH1"].ChartType = SeriesChartType.Line;
CHART_CH1.Series["CH1"].Color = Color.Orange;
CHART_CH2.Series["CH2"].ChartType = SeriesChartType.Line;
CHART_CH2.Series["CH2"].Color = Color.Blue;
//CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH136), 36);
//CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH138), 38);
CHART_CH1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
CHART_CH1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
CHART_CH2.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
CHART_CH2.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
CHART_CH1.DataSource = dt;
CHART_CH2.DataSource = dt;
CHART_CH1.Series["CH1"].XValueMember = "No.";
CHART_CH1.Series["CH1"].YValueMembers = "CH1";
CHART_CH2.Series["CH2"].XValueMember = "No.";
CHART_CH2.Series["CH2"].YValueMembers = "CH2";
//databind
CHART_CH1.DataBind();
CHART_CH2.DataBind();
}
}
private void CHART_CH1_MouseEnter(object sender, EventArgs e)
{
if (!CHART_CH1.Focused)
CHART_CH1.Focus();
}
private void CHART_CH1_MouseLeave(object sender, EventArgs e)
{
if (CHART_CH1.Focused)
CHART_CH1.Parent.Focus();
}
private void CHART_CH2_MouseEnter(object sender, EventArgs e)
{
if (!CHART_CH2.Focused)
CHART_CH2.Focus();
}
private void CHART_CH2_MouseLeave(object sender, EventArgs e)
{
if (CHART_CH2.Focused)
CHART_CH2.Parent.Focus();
}
private void CHART_CH1_MouseWheel(object sender, MouseEventArgs e)
{
var chart = (Chart)sender;
var xAxis = chart.ChartAreas[0].AxisX;
var yAxis = chart.ChartAreas[0].AxisY;
try
{
if (e.Delta < 0) // Scrolled down.
{
xAxis.ScaleView.ZoomReset();
yAxis.ScaleView.ZoomReset();
}
else if (e.Delta > 0) // Scrolled up.
{
var xMin = xAxis.ScaleView.ViewMinimum;
var xMax = xAxis.ScaleView.ViewMaximum;
var yMin = yAxis.ScaleView.ViewMinimum;
var yMax = yAxis.ScaleView.ViewMaximum;
var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
xAxis.ScaleView.Zoom(posXStart, posXFinish);
yAxis.ScaleView.Zoom(posYStart, posYFinish);
}
}
catch { throw; }
}
private void CHART_CH2_MouseWheel(object sender, MouseEventArgs e)
{
var chart = (Chart)sender;
var xAxis = chart.ChartAreas[0].AxisX;
var yAxis = chart.ChartAreas[0].AxisY;
try
{
if (e.Delta < 0) // Scrolled down.
{
xAxis.ScaleView.ZoomReset();
yAxis.ScaleView.ZoomReset();
}
else if (e.Delta > 0) // Scrolled up.
{
var xMin = xAxis.ScaleView.ViewMinimum;
var xMax = xAxis.ScaleView.ViewMaximum;
var yMin = yAxis.ScaleView.ViewMinimum;
var yMax = yAxis.ScaleView.ViewMaximum;
var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
xAxis.ScaleView.Zoom(posXStart, posXFinish);
yAxis.ScaleView.Zoom(posYStart, posYFinish);
}
}
catch { throw; }
}
}
}