Moondra
Moondra

Reputation: 4511

Changing the colors of each hist facet on facetgrid?

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:

enter image description here

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') enter image description here

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

Answers (1)

Nickil Maveli
Nickil Maveli

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')

Image

Upvotes: 9

Related Questions