Yves
Yves

Reputation: 47

create seaborn facetgrid based on crosstab table

my dataframe is structured:

ACTIVITY    2014    2015    2016    2017    2018
WALK         198     501     485     394     461
RUN          187     446     413     371     495
JUMP          45      97      88     103      78
JOG         1125    2150    2482    2140    2734
SLIDE       1156    2357    2530    2044    1956    

my visualization goal: facetgrid of bar charts showing the percentage points over time, with each bar either positive/negative depending on percentage change of the year of course. each facet is an INCIDENT type, if that makes sense. for example, one facet would be a barplot of WALK, the other would be RUN, and so on and so forth. x-axis would be time of course (2014, 2015, 2016, etc) and y-axis would be the value (%change) from each year.

in my analysis, i added pct_change columns for every year except the baseline 2014 using simple pct_change() function that takes in two columns from df and spits back out a new calculated column:

df['%change_2015'] = pct_change(df['2014'],df['2015'])
df['%change_2016'] = pct_change(df['2015'],df['2016'])
   ... etc.

so with these new columns, i think i have the elements i need for my data visualization goal. how can i do it with seaborn facetgrids? specifically bar plots?

augmented dataframe (slice view):

ACTIVITY    2014    2015    2016    2017    2018    %change_2015    %change_2016
WALK         198     501     485     394     461          153.03           -3.19
RUN          187     446     413     371     495             xyz             xyz
JUMP          45      97      88     103      78             xyz             xyz

i tried reading through the seaborn documentation but i was having trouble understanding the configurations: https://seaborn.pydata.org/generated/seaborn.FacetGrid.html

is the problem the way my dataframe is ordered and structured? i hope all of that made sense. i appreciate any help with this.

Upvotes: 0

Views: 199

Answers (1)

keramat
keramat

Reputation: 4543

Use:

import pandas as pd
cols = 'ACTIVITY', '%change_2015', '%change_2016'
data = [['Jump', '10.1', '-3.19'],['Run', '9.35', '-3.19'], ['Run', '4.35', '-1.19']]
df = pd.DataFrame(data, columns = cols)
dfm = pd.melt(df, id_vars=['ACTIVITY'], value_vars=['%change_2015', '%change_2016'])
dfm['value'] = dfm['value'].astype(float)
import seaborn as sns
g = sns.FacetGrid(dfm, col='variable')
g.map(sns.barplot, 'ACTIVITY', "value")

Output:

enter image description here

Based on your comment:

g = sns.FacetGrid(dfm, col='ACTIVITY')
g.map(sns.barplot, 'variable', "value")

Output:

enter image description here

Upvotes: 1

Related Questions