Py.rookie89
Py.rookie89

Reputation: 129

Overlay two separate histograms in python

I have two separate dataframes that I made into histograms and I want to know how I can overlay them so for each category in the x axis the bar is a different color for each dataframe. This is the code I have for the separate bar graphs.

df1.plot.bar(x='brand', y='desc')
df2.groupby(['brand']).count()['desc'].plot(kind='bar')

I tried this code:

previous = df1.plot.bar(x='brand', y='desc')
current= df2.groupby(['brand']).count()['desc'].plot(kind='bar')
bins = np.linspace(1, 4)

plt.hist(x, bins, alpha=0.9,normed=1, label='Previous')
plt.hist(y, bins, alpha=0.5, normed=0,label='Current')
plt.legend(loc='upper right')
plt.show()

This code is not overlaying the graphs properly. The problem is dataframe 2 doesn't have numeric values so i need to use the count method. Appreciate the help!

Upvotes: 1

Views: 6957

Answers (2)

SantiStSupery
SantiStSupery

Reputation: 212

Make use of seaborn's histogram with several variables. In your case it would be:

import seaborn as sns

previous = df1.plot.bar(x='brand', y='desc')
current= df2.groupby(['brand']).count()['desc']


sns.distplot( previous , color="skyblue", label="previous")
sns.distplot( current , color="red", label="Current")

Upvotes: 1

Luis Ortiz
Luis Ortiz

Reputation: 41

You might have to use axes objects in matplotlib. In simple terms, you create a figure with some axes object associated with it, then you can call hist from it. Here's one way you can do it:

fig, ax = plt.subplots(1, 1)

ax.hist(x, bins, alpha=0.9,normed=1, label='Previous')
ax.hist(y, bins, alpha=0.5, normed=0,label='Current')
ax.legend(loc='upper right')

plt.show()

Upvotes: 1

Related Questions