How To Scale Seaborn's Y-axis With A Bar Plot
I'm using factorplot(kind='bar'). How do I scale the y-axis, for example with log-scale? I tried tinkering with the plots' axes, but that always messed up the bar plot in one way o
Solution 1:
Considering your question mentions barplot
I thought I would add in a solution for that type of plot also as it differs from the factorplot
in @Jules solution.
import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid")
xs = ["First", "First", "Second", "Second", "Third", "Third"]
hue = ["Female", "Male"] * 3
ys = [1988, 301, 860, 77, 13, 1]
g = sns.barplot(x=xs, y=ys, hue=hue)
g.set_yscale("log")
_ = g.set(xlabel="Class", ylabel="Survived")
And if you want to label the y-axis with non-logarithmic labels you can do the following.
import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid")
xs = ["First", "First", "Second", "Second", "Third", "Third"]
hue = ["Female", "Male"] * 3
ys = [1988, 301, 860, 77, 13, 1]
g = sns.barplot(x=xs, y=ys, hue=hue)
g.set_yscale("log")
# the non-logarithmic labels you want
ticks = [1, 10, 100, 1000]
g.set_yticks(ticks)
g.set_yticklabels(ticks)
_ = g.set(xlabel="Class", ylabel="Survived")
Solution 2:
Note that seaborn.factorplot
was renamed to seaborn.catplot
import seaborn as sns
import matplotlib.pyplot as plt
titanic = sns.load_dataset("titanic")
g = sns.catplot(x="class", y="survived", hue="sex",
data=titanic, kind="bar",
height=5, palette="muted", legend=False, log=True)
plt.show()
You can use Matplotlib commands after calling factorplot
.
For example:
g = sns.factorplot(x="class", y="survived", hue="sex",
data=titanic, kind="bar",
height=5, palette="muted", legend=False)
g.fig.get_axes()[0].set_yscale('log')
plt.show()
Solution 3:
If you are facing the problem of vanishing bars upon setting log-scale using the previous solutions, try adding log=True
to the seaborn function call instead. (I'm lacking reputation to comment on the other answers).
Using sns.factorplot
:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
titanic = sns.load_dataset("titanic")
g = sns.factorplot(x="class", y="survived", hue="sex", kind='bar',
data=titanic, palette="muted", log=True)
g.ax.set_ylim(0.05, 1)
Using sns.barplot
:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
titanic = sns.load_dataset("titanic")
g = sns.barplot(x="class", y="survived", hue="sex",
data=titanic, palette="muted", log=True)
g.set_ylim(0.05, 1)
Post a Comment for "How To Scale Seaborn's Y-axis With A Bar Plot"