pythonmatplotlibseabornhistplot

How To Plot Multiple Histograms On Same Plot With Seaborn


With matplotlib, I can make a histogram with two datasets on one plot (one next to the other, not overlay).

import matplotlib.pyplot as plt
import random

x = [random.randrange(100) for i in range(100)]
y = [random.randrange(100) for i in range(100)]
plt.hist([x, y])
plt.show()

This yields the following plot.

enter image description here

However, when I try to do this with seabron;

import seaborn as sns
sns.distplot([x, y])

I get the following error:

ValueError: color kwarg must have one color per dataset

So then I try to add some color values:

sns.distplot([x, y], color=['r', 'b'])

And I get the same error. I saw this post on how to overlay graphs, but I would like these histograms to be side by side, not overlay.

And looking at the docs it doesn't specify how to include a list of lists as the first argument 'a'.

How can I achieve this style of histogram using seaborn?


Solution

  • If I understand you correctly you may want to try something this:

    fig, ax = plt.subplots()
    for a in [x, y]:
        sns.distplot(a, bins=range(1, 110, 10), ax=ax, kde=False)
    ax.set_xlim([0, 100])
    

    Which should yield a plot like this:

    enter image description here

    UPDATE:

    Looks like you want 'seaborn look' rather than seaborn plotting functionality. For this you only need to:

    import seaborn as sns
    plt.hist([x, y], color=['r','b'], alpha=0.5)
    

    Which will produce:

    enter image description here

    UPDATE for seaborn v0.12+:

    After seaborn v0.12 to get seaborn-styled plots you need to:

    import seaborn as sns
    sns.set_theme()  # <-- This actually changes the look of plots.
    plt.hist([x, y], color=['r','b'], alpha=0.5)
    

    See seaborn docs for more information.