# How to plot a count bar chart with a Pandas DF, grouping by one categorical column and colouring by another

Hello Guys, How are you all? Hope You all Are Fine. Today We Are Going To learn about How to plot a count bar chart with a Pandas DF, grouping by one categorical column and colouring by another in Python. So Here I am Explain to you all the possible Methods here.

## How to plot a count bar chart with a Pandas DF, grouping by one categorical column and colouring by another?

1. How to plot a count bar chart with a Pandas DF, grouping by one categorical column and colouring by another?

It might be a little bit too complicated but this does the work. I first defined the mappings from name to industry and from industry to color

2. plot a count bar chart with a Pandas DF, grouping by one categorical column and colouring by another

It might be a little bit too complicated but this does the work. I first defined the mappings from name to industry and from industry to color

## Method 1

def plot_bargraph_with_groupings(df, groupby, colourby, title, xlabel, ylabel):
"""
Plots a dataframe showing the frequency of datapoints grouped by one column and coloured by another.
df : dataframe
groupby: the column to groupby
colourby: the column to color by
title: the graph title
xlabel: the x label,
ylabel: the y label
"""

import matplotlib.patches as mpatches

# Makes a mapping from the unique colourby column items to a random color.
ind_col_map = {x:y for x, y in zip(df[colourby].unique(),
[plt.cm.Paired(np.arange(len(df[colourby].unique())))][0])}

# Find when the indicies of the soon to be bar graphs colors.
unique_comb = df[[groupby, colourby]].drop_duplicates()
name_ind_map = {x:y for x, y in zip(unique_comb[groupby], unique_comb[colourby])}
c = df[groupby].value_counts().index.map(lambda x: ind_col_map[name_ind_map[x]])

# Makes the bargraph.
ax = df[groupby].value_counts().plot(kind='bar',
figsize=FIG_SIZE,
title=title,
color=[c.values])
# Makes a legend using the ind_col_map
legend_list = []
for key in ind_col_map.keys():
legend_list.append(mpatches.Patch(color=ind_col_map[key], label=key))

# display the graph.
plt.legend(handles=legend_list)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)

## Method 2

It might be a little bit too complicated but this does the work. I first defined the mappings from name to industry and from industry to color (it seems like there are only two industries but you can adjust the dictionary to your case):

ind_col_map = {
"industry1": "red",
"industry2": "blue"
}

unique_comb = df[["Name","industry"]].drop_duplicates()
name_ind_map = {x:y for x, y in zip(unique_comb["Name"],unique_comb["industry"])}

Then the color can be generated by using the above two mappings:

c = df['Name'].value_counts().index.map(lambda x: ind_col_map[name_ind_map[x]])

Finally, you only need to simply add color to your plotting function:

ax = df['Name'].value_counts().plot(kind='bar',
figsize=(14,8),
title="Number for each Owner Name", color=c)
ax.set_xlabel("Owner Names")
ax.set_ylabel("Frequency")
plt.show()

## Summery

It’s all About this issue. Hope all Methods helped you a lot. Comment below Your thoughts and your queries. Also, Comment below which Method worked for you? Thank You.