Reputation: 4511
I'm using the titanic dataset from kaggle, and I would like to differentiate the facets of Survivors (1) vs Non-Survivors (0) via different colors.
Here is my current FacetGrid:
The left facets(graphs) are of those who didn't survive. I want those to be colored in red. The right facets are fine the way the are at the moment.
So my desired output will look something like this.
I would also like to add a simple legend to each facet (red color = 'Died', blue color = 'Survived')
Here is a sample dataframe Full Set
Sex Survived
PassengerId
1 male 0
2 female 1
3 female 1
4 female 1
5 male 0
6 male 0
7 male 0
8 male 0
9 female 1
10 female 1
11 female 1
12 female 1
13 male 0
14 male 0
15 female 0
16 female 1
17 male 0
18 male 1
19 female 0
Here is the code I currently have:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style ="ticks")
h=sns.FacetGrid(Full_set, col ='Survived', row ='Sex', palette = 'Set1', size =2, aspect =2)
h =h.map(plt.hist, 'Age')
plt.show()
I went through the FacetGrid's API in the documentation (http://seaborn.pydata.org/generated/seaborn.FacetGrid.html#seaborn.FacetGrid) but I didn't see any examples or a way to do what I desire. EDIT:
I tried hue
but the problem I was having was that on a hist, the graphs ended up overlapping, and fully covering the graph with lesser values.
Thank you!
Upvotes: 4
Views: 16437
Reputation: 29711
The hue
parameter works similar to a groupby
object. So, when the hue
is set according to the Survived column, it becomes a separate entity for it's unique values(namely, 0 and 1). Then using it's keywords arg, input the colors you want to display for each grouped instance(0→red, 1→blue).
Possibility 1:
d = {'color': ['r', 'b']}
g = sns.FacetGrid(df, row='Sex', col='Survived', hue_kws=d, hue='Survived')
g.map(plt.hist, 'Age')
Possibility 2:
g = sns.FacetGrid(df, row='Sex', col='Survived', hue='Survived', palette='Set1')
g.map(plt.hist, 'Age')
Upvotes: 9