In a previous post, I introduced a representation of real cities in virtual reality. Flying around a city is a fun way to explore places that may be hard to get to, but it doesn’t offer much more than a poor facsimile of the real thing. But by adding data visualization to the simulation, the experience can be substantially different from the real world and also from the traditional, two-dimensional presentations of location-based data.

View the demo »
View the source code »

This toolkit includes four three-dimensional representations of data placed in our virtual world. You can select one data visualization at a time and search for any location, and then click the “VR” button to activate virtual reality mode, if you have a headset such as the Oculus Rift (Read the instructions for navigation here). Be sure to close other windows or applications on your computer to maximize the frame rate.

Data Visualizations

Average Income

There are two views representing average income, either as vertical bars or as hemispherical bubbles. The data come from the 2010 US census, so this one only works inside the United States. Each bar or bubble represents the average for a single census tract. Because each data point is already an average, we don’t see the highest and lowest values on their own. Even so, differences in income across a city are clear.

Population Particles

Inspired by the Racial Dot Map, the second visualization shows population broken down by race, with each person represented as a color-coded particle, like a snowflake or bit of pollen floating in the air. This one also comes from the 2010 US census. Reducing everyone to a single color based on race is perhaps over-simplistic and any attempt to do so demonstrates the complexity of race, but watching the colors change as one flies around the country seems a startling and effective way to show the diversity – or lack thereof – of each neighborhood.

NYPD Personal Injury Claims

This view plots every personal injury claim made against the New York City Police Department in 2013. The visual is simple: each claim is represented as a red cylinder, similar to the income bars. Looking out across the city shows great disparity across neighborhoods, probably about as well as a 2-D map does. But at lower elevation, I caught myself trying to navigate heavily-affected areas like Harlem and The Bronx while avoiding any of the incidents and found it impossible.

Bike and Run GPS Logs

The GPS data behind this visualization comes from a friend who is an avid triathlete. Vizicities makes it easy to import the GPX files generated by tracking devices. It’s possible to have users follow the paths, but the GPS data are imperfect and sometimes paths go through buildings. Without a lot of data clean-up, it would be an unpleasant experience. I chose to simply draw the paths as colored lines and let the user follow them manually. With the mobile phone control for movement, the result is a nice simulation of what it might be like to ride through the city.

Tips for Implementation

The biggest difference between virtual reality and flat, map-based data visualizations is that you can be placed “inside” the data, rather than above it. We’ve experienced an unexpected intimacy from these visualizations, along with a sense of scale, though when the viewer is placed close to the ground, buildings can obstruct data that is more than a block away. In many cases it will be helpful to enable a top-down view for context.

The subjective point of view is also more cinematic than a map, making it potentially more powerful for storytelling. But it lacks the framing, focus and other tools that filmmakers use to direct the viewer. Any work attempting to use virtual reality with data to tell a story should take these differences into consideration.

The two biggest technical challenges of implementation were getting the data in a usable format and effectively rendering it in three dimensions. Fortunately, many local and national governments have open data initiatives, but the data are seldom hosted in convenient formats. For this experiment, I had to download several hundred megabytes of data files in obscure formats from the US Census site and write scripts to break them down into geographical tiles and save them in a format easily read in a browser.

Once the data is formatted the next trick is getting it rendered. Vizicities provides some infrastructure for this, but it’s a young project that is continuing to improve. A project like this would benefit from smarter caching of data, tighter control over switching data views on and off and a way to customize how data objects look without having to write loads of custom code. The data layers are also quite a large additional burden on the graphics processor, lowering the frame rate below what’s necessary for virtual reality. Aggressive code optimization is likely necessary to get back up to optimal performance levels.

Try the demo, let us know what you think, or what you think we should do with it next! You can comment below, use the hashtag #povtech or email us at

View the demo »
View the source code »

Get more documentary film news and features: Subscribe to POV’s documentary blog, like POV on Facebook or follow us on Twitter @povdocs!

Published by

Brian Chirls is the Digital Technology Fellow at POV, developing digital tools for documentary filmmakers, journalists and other nonfiction media-makers. The position is a first for POV and is funded as part of a $250,000 grant from John S. and James L. Knight Foundation. Follow him on Twitter @bchirls and GitHub.