Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Seaborn boxplot: TypeError: unsupported operand type(s) for /: 'str' and 'int'

Tags:

python

seaborn

I try to make vertical seaborn boxplot like this

import pandas as pd
df = pd.DataFrame({'a' : ['a', 'b' , 'b', 'a'], 'b' : [5, 6, 4, 3] })
import seaborn as sns
import matplotlib.pylab as plt
%matplotlib inline
sns.boxplot(  x= "b",y="a",data=df )

i get

enter image description here

i write orient

sns.boxplot(  x= "c",y="a",data=df , orient = "v")

and get

TypeError: unsupported operand type(s) for /: 'str' and 'int'

but

sns.boxplot(  x= "c",y="a",data=df , orient = "h")

works coreect! what's wrong?

TypeError                                 Traceback (most recent call last)
<ipython-input-16-5291a1613328> in <module>()
----> 1 sns.boxplot(  x= "b",y="a",data=df , orient = "v")

C:\Program Files\Anaconda3\lib\site-packages\seaborn\categorical.py in boxplot(x, y, hue, data, order, hue_order, orient, color, palette, saturation, width, fliersize, linewidth, whis, notch, ax, **kwargs)
   2179     kwargs.update(dict(whis=whis, notch=notch))
   2180 
-> 2181     plotter.plot(ax, kwargs)
   2182     return ax
   2183 

C:\Program Files\Anaconda3\lib\site-packages\seaborn\categorical.py in plot(self, ax, boxplot_kws)
    526     def plot(self, ax, boxplot_kws):
    527         """Make the plot."""
--> 528         self.draw_boxplot(ax, boxplot_kws)
    529         self.annotate_axes(ax)
    530         if self.orient == "h":

C:\Program Files\Anaconda3\lib\site-packages\seaborn\categorical.py in draw_boxplot(self, ax, kws)
    463                                          positions=[i],
    464                                          widths=self.width,
--> 465                                          **kws)
    466                 color = self.colors[i]
    467                 self.restyle_boxplot(artist_dict, color, props)

C:\Program Files\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
   1816                     warnings.warn(msg % (label_namer, func.__name__),
   1817                                   RuntimeWarning, stacklevel=2)
-> 1818             return func(ax, *args, **kwargs)
   1819         pre_doc = inner.__doc__
   1820         if pre_doc is None:

C:\Program Files\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in boxplot(self, x, notch, sym, vert, whis, positions, widths, patch_artist, bootstrap, usermedians, conf_intervals, meanline, showmeans, showcaps, showbox, showfliers, boxprops, labels, flierprops, medianprops, meanprops, capprops, whiskerprops, manage_xticks, autorange)
   3172             bootstrap = rcParams['boxplot.bootstrap']
   3173         bxpstats = cbook.boxplot_stats(x, whis=whis, bootstrap=bootstrap,
-> 3174                                        labels=labels, autorange=autorange)
   3175         if notch is None:
   3176             notch = rcParams['boxplot.notch']

C:\Program Files\Anaconda3\lib\site-packages\matplotlib\cbook.py in boxplot_stats(X, whis, bootstrap, labels, autorange)
   2036 
   2037         # arithmetic mean
-> 2038         stats['mean'] = np.mean(x)
   2039 
   2040         # medians and quartiles

C:\Program Files\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py in mean(a, axis, dtype, out, keepdims)
   2883 
   2884     return _methods._mean(a, axis=axis, dtype=dtype,
-> 2885                           out=out, keepdims=keepdims)
   2886 
   2887 

C:\Program Files\Anaconda3\lib\site-packages\numpy\core\_methods.py in _mean(a, axis, dtype, out, keepdims)
     70         ret = ret.dtype.type(ret / rcount)
     71     else:
---> 72         ret = ret / rcount
     73 
     74     return ret

TypeError: unsupported operand type(s) for /: 'str' and 'int'
like image 681
Edward Avatar asked Oct 08 '16 20:10

Edward


1 Answers

For seaborn's boxplots it is important to keep an eye on the x-axis and y-axis assignments, when switching between horizontal and vertical alignment:

%matplotlib inline
import pandas as pd
import seaborn as sns

df = pd.DataFrame({'a' : ['a', 'b' , 'b', 'a'], 'b' : [5, 6, 4, 3] })

# horizontal boxplots
sns.boxplot(x="b", y="a", data=df, orient='h')

# vertical boxplots
sns.boxplot(x="a", y="b", data=df, orient='v')

Mixing up the columns will cause seaborn to try to calculate the summary statistics of the boxes on categorial data, which is bound to fail.

like image 90
cel Avatar answered Sep 24 '22 17:09

cel