简体   繁体   中英

How to create horizontal barplot from pandas series using seaborn?

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:

在此处输入图像描述

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

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:

水平条形图

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM