C#的Chart控件实现温湿度实时曲线显示
C#的Chart控件实现温湿度实时曲线显示
1. Chart控件初始化配置
基础设置
// 清除默认系列
chart1.Series.Clear();
// 创建温度系列(红色曲线)
Series tempSeries = new Series("温度");
tempSeries.ChartType = SeriesChartType.FastLine; // 高性能折线
tempSeries.Color = Color.Red;
tempSeries.BorderWidth = 2;
chart1.Series.Add(tempSeries);
// 创建湿度系列(蓝色曲线)
Series humidSeries = new Series("湿度");
humidSeries.ChartType = SeriesChartType.FastLine;
humidSeries.Color = Color.Blue;
chart1.Series.Add(humidSeries);
// 坐标轴设置
chart1.ChartAreas[0].AxisX.Title = "时间";
chart1.ChartAreas[0].AxisY.Title = "数值";
chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; // 时间格式
滚动显示优化
// 自动滚动时间轴(显示最近60秒)
chart1.ChartAreas[0].AxisX.ScaleView.Size = 60;
chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
chart1.ChartAreas[0].AxisX.ScaleView.Scroll(DateTime.Now); // 初始定位到最新
2. 实时数据更新机制
定时器配置
System.Windows.Forms.Timer dataTimer = new System.Windows.Forms.Timer();
dataTimer.Interval = 1000; // 1秒更新一次
dataTimer.Tick += DataTimer_Tick;
dataTimer.Start();
数据更新逻辑
private void DataTimer_Tick(object sender, EventArgs e)
{
// 1. 获取实时数据(此处用随机数模拟)
double temp = new Random().Next(20, 35); // 模拟温度值(20~35℃)
double humidity = new Random().Next(30, 80); // 模拟湿度值(30~80%RH)
// 2. 添加新数据点
DateTime now = DateTime.Now;
chart1.Series["温度"].Points.AddXY(now, temp);
chart1.Series["湿度"].Points.AddXY(now, humidity);
// 3. 限制数据量(保留最近100个点)
foreach (Series series in chart1.Series)
{
if (series.Points.Count > 100)
series.Points.RemoveAt(0);
}
// 4. 自动滚动时间轴
chart1.ChartAreas[0].AxisX.ScaleView.Scroll(now);
}
3. 性能优化技巧
-
数据点数量控制
保留固定数量数据点(如100个),避免内存无限增长:
if (series.Points.Count > 100) series.Points.RemoveAt(0); -
双缓冲技术
减少绘图闪烁:
chart1.GetType().GetProperty("DoubleBuffered") .SetValue(chart1, true, null); -
批量更新模式
关闭重绘直到更新完成:
chart1.BeginInit(); // 更新数据点... chart1.EndInit(); // 触发一次重绘 -
禁用非必要特效
提升渲染速度:
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false; // 关闭网格线 foreach (Series s in chart1.Series) { s.ShadowOffset = 0; // 禁用阴影 }
参考代码 C#_温湿度实时曲线显示(chart控件) www.youwenfan.com/contentcne/101756.html
4. 扩展功能实现
数据源切换(真实传感器)
// 替换随机数为真实传感器读取(示例:串口读取)
private (double temp, double humid) ReadSensorData()
{
using (SerialPort port = new SerialPort("COM3", 9600))
{
port.Open();
string data = port.ReadLine(); // 格式 "25.5,60.2"
string[] values = data.Split(',');
return (double.Parse(values[0]), double.Parse(values[1]));
}
}
报警阈值标记
// 温度超限时标记数据点(>30℃标红)
if (temp > 30)
{
DataPoint point = chart1.Series["温度"].Points.Last();
point.MarkerColor = Color.Red;
point.MarkerSize = 8;
point.MarkerStyle = MarkerStyle.Circle;
}
图表保存功能
// 保存当前图表为PNG
chart1.SaveImage("温湿度记录_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".png", ChartImageFormat.Png);
5. 完整代码结构
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
InitChart(); // 初始化图表
InitTimer(); // 启动定时器
}
private void InitChart() { /* 图表配置代码 */ }
private void InitTimer()
{
Timer timer = new Timer { Interval = 1000 };
timer.Tick += (s, e) => {
var (temp, humid) = ReadSensorData(); // 实际项目需替换为真实数据源
UpdateChart(temp, humid);
};
timer.Start();
}
private void UpdateChart(double temp, double humid)
{
chart1.BeginInit();
// 添加数据点并优化显示
chart1.EndInit();
}
}
实现高性能的温湿度实时曲线显示系统,适用于工业监控、实验室记录、智能家居等场景。
浙公网安备 33010602011771号