#!/usr/bin/env python # coding: utf-8 # In[1]: import plotly.plotly as py import pandas as pd # In[2]: # The datasets' url. Thanks Jennifer Bryan! url_csv = 'http://www.stat.ubc.ca/~jenny/notOcto/STAT545A/examples/gapminder/data/gapminderDataFiveYear.txt' df = pd.read_csv(url_csv, sep='\t') df.head() # Let's plot population as a function of the year for a few selected countries # In[3]: countries = ['China', 'India', 'United States', 'Bangladesh', 'South Africa'] fill_colors = ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854'] gf = df.groupby('country') # In[4]: data = [] for country, fill_color in zip(countries[::-1], fill_colors): group = gf.get_group(country) years = group['year'].tolist() length = len(years) country_coords = [country] * length pop = group['pop'].tolist() zeros = [0] * length data.append(dict( type='scatter3d', mode='lines', x=years + years[::-1] + [years[0]], # year loop: in incr. order then in decr. order then years[0] y=country_coords * 2 + [country_coords[0]], z=pop + zeros + [pop[0]], name='', surfaceaxis=1, # add a surface axis ('1' refers to axes[1] i.e. the y-axis) surfacecolor=fill_color, line=dict( color='black', width=4 ), )) layout = dict( title='Population from 1957 to 2007 [Gapminder]', showlegend=False, scene=dict( xaxis=dict(title=''), yaxis=dict(title=''), zaxis=dict(title=''), camera=dict( eye=dict(x=-1.7, y=-1.7, z=0.5) ) ) ) fig = dict(data=data, layout=layout) # In[6]: py.iplot(fig, validate=False, filename='filled-3d-lines') # In[ ]: