新型肺炎感染人數數據圖表化

點擊上方藍字可直接關注!方便下次閱讀。如果對你有幫助,可以點個在看,讓它可以幫助到更多同志~

一、概述

 

最近被新型肺炎搞得惶惶不可終日,眼看着人數一天天的攀升,直接看數據沒有直觀的感受,所以將數據圖表化。

 

說做就做,以黑龍江省爲例,我們在黑龍江省衛健委可以查看到每天的數據,如下:

有了這些數據後,可以通過Qt的QChart模塊將數據圖表化,之前的文章舉過條形圖的示例。這次在之前的基礎上使用折線圖來體現。

Ok,接下來就是要將衛健委網頁上的數據存起來,然後讀取這些數據再繪製折線圖。是直接存成文本文件還是存成excel呢?文本文件存儲方便,但是進行數據解析以及個人閱讀不方便;存成excel是我不會這個功能。。想了3秒鐘,決定存成excel。於是在網上查找Qt如何讀取excel數據,一頓操作猛如虎,資料就是無法用,而且還是2016年的資料,現在可是0202年了啊。發個牢騷而已,任務還是要完成的。又一頓操作,還真可以,而且不用下載其他軟件,也無需使用第三方庫,是一個pri工程。下面是如何操作了。

 

二、程序環境搭建

1. QtCharts 環境搭建

參考之前的文章Qt 2D數據可視化之 QCharts

 

2. Qt 讀取excel cell環境搭建

資源鏈接 https://github.com/QtExcel/QXlsx

下載解壓後是下面這樣:

1 是使用例子,2是pri模塊。

1的運行效果如下

程序先是創建了一個Test.xlsx文件,然後讀取cell 1行1列中的內容,控制檯輸出如下。如何包含pri模塊可以參考1例子。

三、程序編寫

1. Excel 數據如下

左上角第一個cell座標爲(1, 1),使用的數據是圖中框起來的確診和新增確診病例

2. 導入.pri 及charts模塊

include(../QXlsx/QXlsx.pri),可以參考例子中的

QT       += charts

 

3. 折線圖的設置

   過程可以參考之前的柱狀圖。

 

①設置折線相關屬性

 QLineSeries *m_confirmSeries;


m_confirmSeries = new QLineSeries();
m_confirmSeries->setName(tr("確診")); //設置圖例
m_confirmSeries->setPen(QPen(Qt::red, 3)); //設置線條寬度及顏色

②讀取xlsx 文件cell內容

Document xlsxR("E:\\MyQtProject\\2019nCov\\HLJ2019-nCov\\HLJ2019-nCov.xlsx");


    if ( xlsxR.load() ) // 加載excel 文件
    {
        for(int i=0; i<10;i++)
        {
            int confirmRow = i + 7; int confirmCol =  3;                  //確診人數
            int increaseConfirmRow = i + 7; int increaseConfirmCol =  5;  //新增確診


            Cell* confirmCell = xlsxR.cellAt(confirmRow, confirmCol); // 獲得cell指針
            Cell* increaseConfirmCell = xlsxR.cellAt(increaseConfirmRow, increaseConfirmCol);
            if ( confirmCell != nullptr )
            {
       // read cell value (number(double), QDateTime, QString ...)
                QVariant confirmVar = confirmCell->readValue(); 
                QVariant increaseConfirmVar = increaseConfirmCell->readValue();
  ②~將cell內容填充到折線數據中
                m_confirmSeries->append(i+1, confirmVar.toInt());  //爲折線填充數據 
                m_increaseConfirmSeries->append(i+1, increaseConfirmVar.toInt());
            }
            else
            {
                qDebug() << "[debug] cell is not set.";
            }
        }
}

③將之前的折線添加到QChart中

 QChart *chart = new QChart();
 chart->addSeries(m_confirmSeries);  //向chart添加折線圖
 chart->addSeries(m_increaseConfirmSeries);
 chart->createDefaultAxes();         //創建默認座標軸
 chart->setTitle("2019-nCov");

④將之前的Chart添加到QChartView 中

  QChartView *chartView = new QChartView(chart); //將chart添加到View中
  chartView->setRenderHint(QPainter::Antialiasing);//設置抗鋸齒方式

最終效果如下:

橫座標是從25日開始,之後順次加1天;縱座標是人數

四、疫情總結

在家待著別亂跑!

 

以史爲鑑可以知興替。

學不可以已!

如需完整工程可在公衆號後臺留言

歡迎大家關注公衆號:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章