实时显示折线图

博客介绍了使用微软Chart控件来实时显示温度数据,聚焦于信息技术中数据可视化展示方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用微软Chart控件,实时显示温度数据。

 

 

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 实时监控
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
            InitChart();
        }

        //初始化
        private void InitChart()
        {
            //设置series的样式
            Series series = chart1.Series[0];
            series.ChartType = SeriesChartType.Line;

            //设置X轴的样式
            chart1.ChartAreas[0].AxisX.ScaleView.Size = 5;
            chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
            chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
            chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;

            //设置Y轴的样式
            chart1.ChartAreas[0].AxisY.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 100;
        }

        //计时器   
        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime time = DateTime.Now;
            //随机数作为数据源
            Random random = new Random();
            Series series1 = chart1.Series[0];
            series1.Points.AddXY(time, random.Next(1, 100));
            //让轴视图显示在当前进度条位置
            chart1.ChartAreas[0].AxisX.ScaleView.Position = series1.Points.Count - 5;
        }

        //按钮 开始
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }

        //按钮 停止
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }

    }
}

 

 

 

 

 

 

 

以下是一个在 QWidget 中实时显示折线图的示例代码: ```cpp #include <QtWidgets> class RealtimeLineChart : public QWidget { public: RealtimeLineChart(QWidget *parent = nullptr) : QWidget(parent) { // 创建折线图对象 m_chart = new QChart(); m_chart->legend()->hide(); // 隐藏图例 // 创建折线序列对象 m_series = new QLineSeries(); m_chart->addSeries(m_series); // 设置坐标轴 m_axis_x = new QValueAxis(); m_axis_x->setLabelFormat("%d"); // 设置 X 轴标签格式 m_axis_x->setRange(0, 100); // 设置 X 轴范围 m_chart->addAxis(m_axis_x, Qt::AlignBottom); m_series->attachAxis(m_axis_x); m_axis_y = new QValueAxis(); m_axis_y->setLabelFormat("%d"); // 设置 Y 轴标签格式 m_axis_y->setRange(0, 100); // 设置 Y 轴范围 m_chart->addAxis(m_axis_y, Qt::AlignLeft); m_series->attachAxis(m_axis_y); // 创建图表视图对象 m_chart_view = new QChartView(m_chart, this); m_chart_view->setRenderHint(QPainter::Antialiasing); // 抗锯齿 QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(m_chart_view); // 定时器,用于定时更新折线图数据 m_timer = new QTimer(this); connect(m_timer, &QTimer::timeout, this, &RealtimeLineChart::updateData); m_timer->start(100); // 每隔 100ms 更新一次折线图数据 } private: QChart *m_chart; QLineSeries *m_series; QValueAxis *m_axis_x; QValueAxis *m_axis_y; QChartView *m_chart_view; QTimer *m_timer; void updateData() { static int x = 0; int y = qrand() % 100; // 生成 0~99 之间的随机数 m_series->append(x++, y); m_axis_x->setRange(qMax(0, x - 100), x); // X 轴范围滚动 } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); RealtimeLineChart chart; chart.resize(400, 300); chart.show(); return a.exec(); } ``` 该示例代码中,我们创建了一个 `RealtimeLineChart` 类,它继承自 QWidget,用于在 QWidget 中实时显示折线图。在 `RealtimeLineChart` 的构造函数中,我们创建了一个 QChart 对象和一个 QLineSeries 对象,并将 QLineSeries 对象添加到 QChart 对象中,最后创建了一个 QChartView 对象用于显示 QChart。同时,我们还创建了一个 QTimer 对象用于定时更新折线图数据。在 `updateData()` 函数中,我们生成一个 0~99 之间的随机数,并将其作为新的数据点添加到 QLineSeries 对象中。最后,我们还对 X 轴范围进行了滚动,保证了折线图中始终显示最新的 100 个数据点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值