Reputation: 11
Actually I am trying to plot a count plot for my numpy array with the shape of (5216,1) by using seaborn library. When I try like this
train_y.shape
sns.set(style="darkgrid")
ax = sns.countplot(x="class", data=train_y)
But It throughs out the like this
AttributeError Traceback (most recent call last)
<ipython-input-33-44c4401caea5> in <module>
1 sns.set(style="darkgrid")
----> 2 ax = sns.countplot(x="class", data=train_y)
/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py in countplot(x, y, hue, data, order, hue_order, orient, color, palette, saturation, dodge, ax, **kwargs)
3553 estimator, ci, n_boot, units, seed,
3554 orient, color, palette, saturation,
-> 3555 errcolor, errwidth, capsize, dodge)
3556
3557 plotter.value_label = "count"
/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py in __init__(self, x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge)
1613 """Initialize the plotter."""
1614 self.establish_variables(x, y, hue, data, orient,
-> 1615 order, hue_order, units)
1616 self.establish_colors(color, palette, saturation)
1617 self.estimate_statistic(estimator, ci, n_boot, seed)
/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py in establish_variables(self, x, y, hue, data, orient, order, hue_order, units)
141 # See if we need to get variables from `data`
142 if data is not None:
--> 143 x = data.get(x, x)
144 y = data.get(y, y)
145 hue = data.get(hue, hue)
AttributeError: 'numpy.ndarray' object has no attribute 'get'
anyone please help me to solve this error
Upvotes: 0
Views: 15592
Reputation: 2398
If you want to use a numpy
array instead of a pandas.Dataframe
, you can simply pass the array as either the x
or y
argument to countplot
.
E.g.
import numpy
import seaborn
data = numpy.array([1, 2, 2, 3, 3, 3])
ax = seaborn.countplot(x=data)
This does not seem to work with multidimensional arrays. Without knowing more about what data you are plotting, it is hard to say for sure how to produce the particular plot you want. However, since your array has only length 1 in the second dimension, how about simply reshaping the array to be one dimensional?
E.g.
train_y.shape = len(train_y)
ax = sns.countplot(x=train_y)
As an aside, it is preferred to use pandas.DataFrames
instead of numpy.arrays
. The examples in the docs, which I assume you have tried to emulate here, use DataFrames
. You can convert your array into a DataFrame
, and specify the name of the variable you will later plot.
E.g.
import numpy
import seaborn as sns
import pandas
data = numpy.array([1, 2, 2, 3, 3, 1, 1, 1, 2])
df = pandas.DataFrame(data=data, columns=["variable"])
Here, "variable"
is the name of a column in the df
'table'. Then when you plot with countplot
, specify this column as the argument to x
.
ax = sns.countplot(x="variable", data=df)
Upvotes: 1