Я думаю, что было бы лучше объединить ваши данные в один фрейм данных, который вы передаете в seaborn, вместо того, чтобы создавать два графика друг над другом. Я вызвал sns.barplot на счетчики вместо того, чтобы использовать sns.countplot для исходных необработанных значений.
#convert the lists to series and get the counts
first_list = pd.Series(
["a", "b", "c", "d", "e", "a", "b", "c", "a", "b","n"]
).value_counts()
second_list = pd.Series(
["a","b","c","d", "e", "e","d","c","e","q"]
).value_counts()
#get the counts as a dataframe
df=pd.concat([first_list,second_list],axis=1)
df.columns=['first','second']
# melt the data frame so it has a "tidy" data format
df=df.reset_index().melt(id_vars=['index'])
df
index variable value
0 a first 3.0
1 b first 3.0
2 c first 2.0
3 d first 1.0
4 e first 1.0
5 n first 1.0
6 q first NaN
7 a second 1.0
8 b second 1.0
9 c second 2.0
10 d second 2.0
11 e second 3.0
12 n second NaN
13 q second 1.0
#plot a bar graph and assign variable to hue
sns.barplot(
x='index',
y='value',
hue='variable',
data=df,
palette=['blue','red'],
alpha=.5,
dodge=False,
)
plt.show()