Welcome to JiKe DevOps Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

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

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 FilesAnaconda3libsite-packagesseaborncategorical.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 FilesAnaconda3libsite-packagesseaborncategorical.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 FilesAnaconda3libsite-packagesseaborncategorical.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 FilesAnaconda3libsite-packagesmatplotlib\__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 FilesAnaconda3libsite-packagesmatplotlibaxes\_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 FilesAnaconda3libsite-packagesmatplotlibcbook.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 FilesAnaconda3libsite-packages
umpycorefromnumeric.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 FilesAnaconda3libsite-packages
umpycore\_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'
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

Please log in or register to answer this question.

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to JiKe DevOps Community for programmer and developer-Open, Learning and Share
...