Creating interactive graphics is vital to data journalism stories. In my first blog post on this subject I explored the possibilities of D3, .JavaScript , R and plotly. If you want to avoid D3 and JavaScript completely and only make use of Python, plotly has developed an interesting new library called Dash. I have been digging into this possibility using data about Dutch municipalities.
From an analysis in R I know that there is correlation between the value of the houses and the average income for municipalities. Checking the partial correlation and using political party as an intervening variable, the correlation does not change dramatically. Can we produce an interactive graph showing this conclusion?
Using the examples in Dash I wrote a new python script. Here it is (gemd.py):
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd
app = dash.Dash()
df = pd.read_csv('gemeented.csv')
app.layout = html.Div([
dcc.Graph(
id='Inkomen versus woz',
figure={
'data': [
go.Scatter(
x=df[df['PARTIJ'] == i]['GEM_INKOMEN'],
y=df[df['PARTIJ'] == i]['GEM_WOZ'],
text=df[df['PARTIJ'] == i]['GEMEENTE'],
mode='markers',
opacity=0.7,
marker={
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
},
name=i
) for i in df.PARTIJ.unique()
],
'layout': go.Layout(
xaxis={'title': 'INKOMEN'},
yaxis={'title': 'WOZ'},
margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
legend={'x': 0, 'y': 1},
hovermode='closest'
)
}
)
])
if __name__ == '__main__':
app.run_server()
When we run the script in a terminal using
python gemd,py
We can inspect the result in the browser at 127.0.0.1:8050.
How to share this with others?
In the right corner of the screen choose the second option from the left: save and edit the plot in the cloud.
This brings you to plot.ly; from here the plot can be exported as embedded link.
You can check and uncheck the parties; zoom in and out; toggle Spike Lines etc.
From an analysis in R I know that there is correlation between the value of the houses and the average income for municipalities. Checking the partial correlation and using political party as an intervening variable, the correlation does not change dramatically. Can we produce an interactive graph showing this conclusion?
Using the examples in Dash I wrote a new python script. Here it is (gemd.py):
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd
app = dash.Dash()
df = pd.read_csv('gemeented.csv')
app.layout = html.Div([
dcc.Graph(
id='Inkomen versus woz',
figure={
'data': [
go.Scatter(
x=df[df['PARTIJ'] == i]['GEM_INKOMEN'],
y=df[df['PARTIJ'] == i]['GEM_WOZ'],
text=df[df['PARTIJ'] == i]['GEMEENTE'],
mode='markers',
opacity=0.7,
marker={
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
},
name=i
) for i in df.PARTIJ.unique()
],
'layout': go.Layout(
xaxis={'title': 'INKOMEN'},
yaxis={'title': 'WOZ'},
margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
legend={'x': 0, 'y': 1},
hovermode='closest'
)
}
)
])
if __name__ == '__main__':
app.run_server()
When we run the script in a terminal using
python gemd,py
We can inspect the result in the browser at 127.0.0.1:8050.
How to share this with others?
In the right corner of the screen choose the second option from the left: save and edit the plot in the cloud.
This brings you to plot.ly; from here the plot can be exported as embedded link.
You can check and uncheck the parties; zoom in and out; toggle Spike Lines etc.
Geen opmerkingen:
Een reactie posten
Opmerking: Alleen leden van deze blog kunnen een reactie posten.