0

I would like to plot the the following series using seaborn horizontally:

fruity             -0.380938
hard               -0.310382
pluribus           -0.247448
nougat              0.199375
caramel             0.213416
crispedricewafer    0.324680
peanutyalmondy      0.406192
bar                 0.429929
chocolate           0.636517
Name: winpercent, dtype: float64

I tried the following code:

ax = sns.barplot(win_corr.index, win_corr.values, orient='h') # win_corr is the variable
ax.set_ylabel('Pearson')    
ax.set_xlabel('')
plt.title('Horizontal')
ax.bar_label(ax.containers[0], fmt= '%0.1f' )
plt.show()

I have the following error:

TypeError                                 Traceback (most recent call last)
<ipython-input-59-0e19fa0939fd> in <module>()
----> 1 ax = sns.barplot(win_corr.index, win_corr.values, orient='h') # win_corr is the variable
      2 ax.set_ylabel('Pearson')
      3 ax.set_xlabel('')
      4 plt.title('Horizontal')
      5 ax.bar_label(ax.containers[0], fmt= '%0.1f' )

4 frames
/usr/local/lib/python3.7/dist-packages/seaborn/_core.py in infer_orient(x, y, orient, require_numeric)
   1336     elif str(orient).startswith("h"):
   1337         if require_numeric and x_type != "numeric":
-> 1338             raise TypeError(nonnumeric_dv_error.format("Horizontal", "x"))
   1339         return "h"
   1340 

TypeError: Horizontal orientation requires numeric `x` variable.

However, it works with normal barplot:

ax = sns.barplot(win_corr.index, win_corr.values)
ax.set_ylabel('pearson')    
ax.set_xlabel('Features')
plt.title('Pearson')
ax.bar_label(ax.containers[0], fmt= '%0.1f' )
plt.show()

The result in the last code is:

enter image description here

What I should change in my code to create a horizontal barplot? Thanks in advance!

0

1 Answer 1

2

I think you just need to swap win_corr.index and win_corr.values

import pandas as pd
import seaborn as sns 
import matplotlib.pyplot as plt

df = pd.DataFrame.from_dict(data = {'name': ["fruity", "hard", "pluribus", "nougat"],'win_corr': [-0.380938, -0.310382, -0.247448, 0.199375]})

ax = sns.barplot(df.win_corr.values,df.name, orient='h') 
ax.set_ylabel('Pearson')    
ax.set_xlabel('')
plt.title('Horizontal')
ax.bar_label(ax.containers[0], fmt= '%0.1f' )
plt.show()

yields this result:

Horizontal Barplot

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.