diff options
Diffstat (limited to 'examples/rainfall')
-rw-r--r-- | examples/rainfall/data/raindata.txt | 170 | ||||
-rw-r--r-- | examples/rainfall/main.cpp | 257 | ||||
-rw-r--r-- | examples/rainfall/rainfall.pro | 5 | ||||
-rw-r--r-- | examples/rainfall/rainfall.qrc | 5 |
4 files changed, 227 insertions, 210 deletions
diff --git a/examples/rainfall/data/raindata.txt b/examples/rainfall/data/raindata.txt new file mode 100644 index 00000000..faa636d4 --- /dev/null +++ b/examples/rainfall/data/raindata.txt @@ -0,0 +1,170 @@ +# Rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo) + +2000,1, 72, +2000,2, 47, +2000,3, 37, +2000,4, 79, +2000,5, 42, +2000,6, 73, +2000,7, 94, +2000,8, 37, +2000,9, 17, +2000,10,69, +2000,11,42, +2000,12,42, + +2001,1, 25, +2001,2, 47, +2001,3, 20, +2001,4, 70, +2001,5, 27, +2001,6, 40, +2001,7, 123, +2001,8, 39, +2001,9, 66, +2001,10,55, +2001,11,29, +2001,12,12, + +2002,1, 24, +2002,2, 45, +2002,3, 27, +2002,4, 30, +2002,5, 16, +2002,6, 98, +2002,7, 122, +2002,8, 20, +2002,9, 50, +2002,10,24, +2002,11,22, +2002,12,12, + +2003,1, 43, +2003,2, 17, +2003,3, 26, +2003,4, 22, +2003,5, 60, +2003,6, 14, +2003,7, 86, +2003,8, 77, +2003,9, 69, +2003,10,49, +2003,11,23, +2003,12,44, + +2004,1, 15, +2004,2, 19, +2004,3, 10, +2004,4, 11, +2004,5, 41, +2004,6, 29, +2004,7, 49, +2004,8, 72, +2004,9, 50, +2004,10,18, +2004,11,19, +2004,12,40, + +2005,1, 60, +2005,2, 24, +2005,3, 12, +2005,4, 50, +2005,5, 88, +2005,6, 32, +2005,7, 76, +2005,8, 55, +2005,9, 92, +2005,10,35, +2005,11,105, +2005,12,59, + +2006,1, 27, +2006,2, 18, +2006,3, 17, +2006,4, 26, +2006,5, 24, +2006,6, 18, +2006,7, 35, +2006,8, 28, +2006,9, 80, +2006,10,52, +2006,11,43, +2006,12,44, + +2007,1, 41, +2007,2, 21, +2007,3, 30, +2007,4, 20, +2007,5, 53, +2007,6, 29, +2007,7, 139, +2007,8, 52, +2007,9, 51, +2007,10,24, +2007,11,47, +2007,12,33, + +2008,1, 67, +2008,2, 19, +2008,3, 30, +2008,4, 31, +2008,5, 29, +2008,6, 79, +2008,7, 75, +2008,8, 99, +2008,9, 34, +2008,10,52, +2008,11,60, +2008,12,20, + +2009,1, 9, +2009,2, 22, +2009,3, 11, +2009,4, 10, +2009,5, 69, +2009,6, 30, +2009,7, 78, +2009,8, 93, +2009,9, 70, +2009,10,32, +2009,11,56, +2009,12,23, + +2010,1, 12, +2010,2, 28, +2010,3, 55, +2010,4, 20, +2010,5, 65, +2010,6, 26, +2010,7, 134, +2010,8, 57, +2010,9, 51, +2010,10,53, +2010,11,8, +2010,12,9, + +2011,1, 34, +2011,2, 20, +2011,3, 30, +2011,4, 31, +2011,5, 42, +2011,6, 78, +2011,7, 85, +2011,8, 33, +2011,9, 42, +2011,10,87, +2011,11,41, +2011,12,72, + +2012,1, 32, +2012,2, 42, +2012,3, 30, +2012,4, 50, +2012,5, 30, +2012,6, 70, +2012,7, 52, +2012,8, 20, +2012,9, 99, +2012,10,70, +2012,11,69, +2012,12,49 diff --git a/examples/rainfall/main.cpp b/examples/rainfall/main.cpp index db736903..6c43f2a0 100644 --- a/examples/rainfall/main.cpp +++ b/examples/rainfall/main.cpp @@ -39,13 +39,14 @@ ****************************************************************************/ #include "q3dbars.h" -#include "qdataitem.h" #include "qcategoryaxis.h" -#include "qolddataproxy.h" +#include "qvariantbardataproxy.h" #include <QGuiApplication> #include <QFont> #include <QDebug> +#include <QTextStream> +#include <QFile> using namespace QtDataVis3D; @@ -62,6 +63,7 @@ private: Q3DBars *m_chart; int m_columnCount; int m_rowCount; + QStringList m_years; }; RainfallChart::RainfallChart(Q3DBars *rainfall) @@ -79,13 +81,12 @@ RainfallChart::RainfallChart(Q3DBars *rainfall) // Set axis labels and titles QStringList months; months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December"; - QStringList years; - years << "2000" << "2001" << "2002" << "2003" << "2004" << "2005" << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012"; + m_years << "2000" << "2001" << "2002" << "2003" << "2004" << "2005" << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012"; m_chart->rowAxis()->setTitle("Year"); m_chart->columnAxis()->setTitle("Month"); m_chart->valueAxis()->setTitle("rainfall (in mm)"); - m_chart->rowAxis()->setLabels(years); + m_chart->rowAxis()->setLabels(m_years); m_chart->columnAxis()->setLabels(months); // Set bar type to cylinder @@ -112,6 +113,9 @@ RainfallChart::RainfallChart(Q3DBars *rainfall) // Set window title m_chart->setWindowTitle(QStringLiteral("Monthly rainfall in Northern Finland (2000-2012)")); + + QVariantBarDataProxy *proxy = new QVariantBarDataProxy; + m_chart->setDataProxy(proxy); } RainfallChart::~RainfallChart() @@ -126,211 +130,44 @@ void RainfallChart::start() void RainfallChart::addDataSet() { - // Fill in rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo) - QVector< QVector<QDataItem*> > data; - QVector<QDataItem*> row; - // TODO: Change this example to load data from file - // 2000 - row.append(new QDataItem(72, "mm")); //January 2000 - row.append(new QDataItem(47, "mm")); //February 2000 - row.append(new QDataItem(37, "mm")); //March 2000 - row.append(new QDataItem(79, "mm")); //April 2000 - row.append(new QDataItem(42, "mm")); //May 2000 - row.append(new QDataItem(73, "mm")); //June 2000 - row.append(new QDataItem(94, "mm")); //July 2000 - row.append(new QDataItem(37, "mm")); //August 2000 - row.append(new QDataItem(17, "mm")); //September 2000 - row.append(new QDataItem(69, "mm")); //October 2000 - row.append(new QDataItem(42, "mm")); //November 2000 - row.append(new QDataItem(42, "mm")); //December 2000 - data.append(row); - row.clear(); - // 2001 - row.append(new QDataItem(25, "mm")); //January 2001 - row.append(new QDataItem(47, "mm")); //February 2001 - row.append(new QDataItem(20, "mm")); //March 2001 - row.append(new QDataItem(70, "mm")); //April 2001 - row.append(new QDataItem(27, "mm")); //May 2001 - row.append(new QDataItem(40, "mm")); //June 2001 - row.append(new QDataItem(123, "mm")); //July 2001 - row.append(new QDataItem(39, "mm")); //August 2001 - row.append(new QDataItem(66, "mm")); //September 2001 - row.append(new QDataItem(55, "mm")); //October 2001 - row.append(new QDataItem(29, "mm")); //November 2001 - row.append(new QDataItem(12, "mm")); //December 2001 - data.append(row); - row.clear(); - // 2002 - row.append(new QDataItem(24, "mm")); //January 2002 - row.append(new QDataItem(45, "mm")); //February 2002 - row.append(new QDataItem(27, "mm")); //March 2002 - row.append(new QDataItem(30, "mm")); //April 2002 - row.append(new QDataItem(16, "mm")); //May 2002 - row.append(new QDataItem(98, "mm")); //June 2002 - row.append(new QDataItem(122, "mm")); //July 2002 - row.append(new QDataItem(20, "mm")); //August 2002 - row.append(new QDataItem(50, "mm")); //September 2002 - row.append(new QDataItem(24, "mm")); //October 2002 - row.append(new QDataItem(22, "mm")); //November 2002 - row.append(new QDataItem(12, "mm")); //December 2002 - data.append(row); - row.clear(); - // 2003 - row.append(new QDataItem(43, "mm")); //January 2003 - row.append(new QDataItem(17, "mm")); //February 2003 - row.append(new QDataItem(26, "mm")); //March 2003 - row.append(new QDataItem(22, "mm")); //April 2003 - row.append(new QDataItem(60, "mm")); //May 2003 - row.append(new QDataItem(14, "mm")); //June 2003 - row.append(new QDataItem(86, "mm")); //July 2003 - row.append(new QDataItem(77, "mm")); //August 2003 - row.append(new QDataItem(69, "mm")); //September 2003 - row.append(new QDataItem(49, "mm")); //October 2003 - row.append(new QDataItem(23, "mm")); //November 2003 - row.append(new QDataItem(44, "mm")); //December 2003 - data.append(row); - row.clear(); - // 2004 - row.append(new QDataItem(15, "mm")); //January 2004 - row.append(new QDataItem(19, "mm")); //February 2004 - row.append(new QDataItem(10, "mm")); //March 2004 - row.append(new QDataItem(11, "mm")); //April 2004 - row.append(new QDataItem(41, "mm")); //May 2004 - row.append(new QDataItem(29, "mm")); //June 2004 - row.append(new QDataItem(49, "mm")); //July 2004 - row.append(new QDataItem(72, "mm")); //August 2004 - row.append(new QDataItem(50, "mm")); //September 2004 - row.append(new QDataItem(18, "mm")); //October 2004 - row.append(new QDataItem(19, "mm")); //November 2004 - row.append(new QDataItem(40, "mm")); //December 2004 - data.append(row); - row.clear(); - // 2005 - row.append(new QDataItem(60, "mm")); //January 2005 - row.append(new QDataItem(24, "mm")); //February 2005 - row.append(new QDataItem(12, "mm")); //March 2005 - row.append(new QDataItem(50, "mm")); //April 2005 - row.append(new QDataItem(88, "mm")); //May 2005 - row.append(new QDataItem(32, "mm")); //June 2005 - row.append(new QDataItem(76, "mm")); //July 2005 - row.append(new QDataItem(55, "mm")); //August 2005 - row.append(new QDataItem(92, "mm")); //September 2005 - row.append(new QDataItem(35, "mm")); //October 2005 - row.append(new QDataItem(105, "mm")); //November 2005 - row.append(new QDataItem(59, "mm")); //December 2005 - data.append(row); - row.clear(); - // 2006 - row.append(new QDataItem(27, "mm")); //January 2006 - row.append(new QDataItem(18, "mm")); //February 2006 - row.append(new QDataItem(17, "mm")); //March 2006 - row.append(new QDataItem(26, "mm")); //April 2006 - row.append(new QDataItem(24, "mm")); //May 2006 - row.append(new QDataItem(18, "mm")); //June 2006 - row.append(new QDataItem(35, "mm")); //July 2006 - row.append(new QDataItem(28, "mm")); //August 2006 - row.append(new QDataItem(80, "mm")); //September 2006 - row.append(new QDataItem(52, "mm")); //October 2006 - row.append(new QDataItem(43, "mm")); //November 2006 - row.append(new QDataItem(44, "mm")); //December 2006 - data.append(row); - row.clear(); - // 2007 - row.append(new QDataItem(41, "mm")); //January 2007 - row.append(new QDataItem(21, "mm")); //February 2007 - row.append(new QDataItem(30, "mm")); //March 2007 - row.append(new QDataItem(20, "mm")); //April 2007 - row.append(new QDataItem(53, "mm")); //May 2007 - row.append(new QDataItem(29, "mm")); //June 2007 - row.append(new QDataItem(139, "mm")); //July 2007 - row.append(new QDataItem(52, "mm")); //August 2007 - row.append(new QDataItem(51, "mm")); //September 2007 - row.append(new QDataItem(24, "mm")); //October 2007 - row.append(new QDataItem(47, "mm")); //November 2007 - row.append(new QDataItem(33, "mm")); //December 2007 - data.append(row); - row.clear(); - // 2008 - row.append(new QDataItem(67, "mm")); //January 2008 - row.append(new QDataItem(19, "mm")); //February 2008 - row.append(new QDataItem(30, "mm")); //March 2008 - row.append(new QDataItem(31, "mm")); //April 2008 - row.append(new QDataItem(29, "mm")); //May 2008 - row.append(new QDataItem(79, "mm")); //June 2008 - row.append(new QDataItem(75, "mm")); //July 2008 - row.append(new QDataItem(99, "mm")); //August 2008 - row.append(new QDataItem(34, "mm")); //September 2008 - row.append(new QDataItem(52, "mm")); //October 2008 - row.append(new QDataItem(60, "mm")); //November 2008 - row.append(new QDataItem(20, "mm")); //December 2008 - data.append(row); - row.clear(); - // 2009 - row.append(new QDataItem(9, "mm")); //January 2009 - row.append(new QDataItem(22, "mm")); //February 2009 - row.append(new QDataItem(11, "mm")); //March 2009 - row.append(new QDataItem(10, "mm")); //April 2009 - row.append(new QDataItem(69, "mm")); //May 2009 - row.append(new QDataItem(30, "mm")); //June 2009 - row.append(new QDataItem(78, "mm")); //July 2009 - row.append(new QDataItem(93, "mm")); //August 2009 - row.append(new QDataItem(70, "mm")); //September 2009 - row.append(new QDataItem(32, "mm")); //October 2009 - row.append(new QDataItem(56, "mm")); //November 2009 - row.append(new QDataItem(23, "mm")); //December 2009 - data.append(row); - row.clear(); - // 2010 - row.append(new QDataItem(12, "mm")); //January 2010 - row.append(new QDataItem(28, "mm")); //February 2010 - row.append(new QDataItem(55, "mm")); //March 2010 - row.append(new QDataItem(20, "mm")); //April 2010 - row.append(new QDataItem(65, "mm")); //May 2010 - row.append(new QDataItem(26, "mm")); //June 2010 - row.append(new QDataItem(134, "mm")); //July 2010 - row.append(new QDataItem(57, "mm")); //August 2010 - row.append(new QDataItem(51, "mm")); //September 2010 - row.append(new QDataItem(53, "mm")); //October 2010 - row.append(new QDataItem(8, "mm")); //November 2010 - row.append(new QDataItem(9, "mm")); //December 2010 - data.append(row); - row.clear(); - // 2011 - row.append(new QDataItem(34, "mm")); //January 2011 - row.append(new QDataItem(20, "mm")); //February 2011 - row.append(new QDataItem(30, "mm")); //March 2011 - row.append(new QDataItem(31, "mm")); //April 2011 - row.append(new QDataItem(42, "mm")); //May 2011 - row.append(new QDataItem(78, "mm")); //June 2011 - row.append(new QDataItem(85, "mm")); //July 2011 - row.append(new QDataItem(33, "mm")); //August 2011 - row.append(new QDataItem(42, "mm")); //September 2011 - row.append(new QDataItem(87, "mm")); //October 2011 - row.append(new QDataItem(41, "mm")); //November 2011 - row.append(new QDataItem(72, "mm")); //December 2011 - data.append(row); - row.clear(); - // 2012 - row.append(new QDataItem(32, "mm")); //January 2012 - row.append(new QDataItem(42, "mm")); //February 2012 - row.append(new QDataItem(30, "mm")); //March 2012 - row.append(new QDataItem(50, "mm")); //April 2012 - row.append(new QDataItem(30, "mm")); //May 2012 - row.append(new QDataItem(70, "mm")); //June 2012 - row.append(new QDataItem(52, "mm")); //July 2012 - row.append(new QDataItem(20, "mm")); //August 2012 - row.append(new QDataItem(99, "mm")); //September 2012 - row.append(new QDataItem(70, "mm")); //October 2012 - row.append(new QDataItem(69, "mm")); //November 2012 - row.append(new QDataItem(49, "mm")); //December 2012 - data.append(row); - row.clear(); - - // TODO QDataSet reverses the data in rows and columns when you add it, so results are now mirrored. - qWarning() << "Example broken! QDataSet mirrors data, rows and columns will not be correct!"; - QOldDataProxy *proxy = new QOldDataProxy; - m_chart->setDataProxy(proxy); - static_cast<QOldDataProxy *>(m_chart->dataProxy())->addDataSet(data); + QVariantDataSet *dataSet = new QVariantDataSet; + QVariantDataItemList *itemList = new QVariantDataItemList; + QTextStream stream; + QFile dataFile(":/data/raindata.txt"); + if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + stream.setDevice(&dataFile); + while (!stream.atEnd()) { + QString line = stream.readLine(); + if (line.startsWith("#")) + continue; + QStringList strList = line.split(",", QString::SkipEmptyParts); + if (strList.size() < 3) { + qWarning() << "Invalid row read from data:" << line; + continue; + } + QVariantDataItem *newItem = new QVariantDataItem; + for (int i = 0; i < 3; i++) + newItem->append(strList.at(i)); + itemList->append(newItem); + } + } else { + qWarning() << "Unable to open data file:" << dataFile.fileName(); + } + + dataSet->addItems(itemList); + + static_cast<QVariantBarDataProxy *>(m_chart->dataProxy())->setDataSet(dataSet); + + // In data file the months are in numeric format, so create custom list + QStringList numericMonths; + for (int i = 1; i <= 12; i++) + numericMonths << QString::number(i); + + QVariantBarMapping mappings; + mappings[QVariantBarMappingItem::MapRow] = QVariantBarMappingItem(0, m_years); + mappings[QVariantBarMappingItem::MapColumn] = QVariantBarMappingItem(1, numericMonths); + mappings[QVariantBarMappingItem::MapValue] = QVariantBarMappingItem(2); + static_cast<QVariantBarDataProxy *>(m_chart->dataProxy())->setMappings(mappings); } int main(int argc, char **argv) diff --git a/examples/rainfall/rainfall.pro b/examples/rainfall/rainfall.pro index 668b5195..f81793ee 100644 --- a/examples/rainfall/rainfall.pro +++ b/examples/rainfall/rainfall.pro @@ -5,3 +5,8 @@ SOURCES += main.cpp INSTALLS += target + +RESOURCES += \ + rainfall.qrc + +OTHER_FILES += data/raindata.txt diff --git a/examples/rainfall/rainfall.qrc b/examples/rainfall/rainfall.qrc new file mode 100644 index 00000000..53cd4915 --- /dev/null +++ b/examples/rainfall/rainfall.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/"> + <file>data/raindata.txt</file> + </qresource> +</RCC> |