summaryrefslogtreecommitdiffstats
path: root/examples/rainfall
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-07-05 15:14:37 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-07-10 07:42:23 +0300
commit90ac3929a64a92c5c6092a791d04dba9088cc501 (patch)
treec91b196798ec8ec64280ffd5c526b6fb4698e632 /examples/rainfall
parent93b5a6af81a7c719f63870b3e9c5ce071b113970 (diff)
Variant dataset support for bars
Variant datasets are just lists of variant lists. To use variant dataset, you need to provide mapping between the chart elements and variant list indices. E.g. in case of bar chart, one index maps for row, another for column, and third for value. The purpose of variant dataset is to make it possible to have just one blob of data and parse different views on it using different mappings. Note that since variant datasets utilize variants, they are not likely to be highly performant. However, the impact is only felt once when the data is parsed into format understood by datavis. Change-Id: I0da39bd18528370afb5060368b0c3280e31e1cf7 Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'examples/rainfall')
-rw-r--r--examples/rainfall/data/raindata.txt170
-rw-r--r--examples/rainfall/main.cpp257
-rw-r--r--examples/rainfall/rainfall.pro5
-rw-r--r--examples/rainfall/rainfall.qrc5
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>