Issue
Below shown is the categorical data detail for the bar chart, which is from a specific DataFrame
column i.e. coast
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
IN: data['coast'].dtypes
OUT:
CategoricalDtype(categories=[0, 1], ordered=False)
IN: data['coast'].value_counts()
OUT:
0 21450
1 163
Name: coast, dtype: int64
Shown below syntax is the defined function used, to get the bar chart.
def code(c):
plt.rc('figure', figsize=(10, 5))
ax = c.value_counts().plot(kind='bar')
for value in ax:
height = value.get_height()
plt.text(value.get_x() + value.get_width()/2.,
1.002*height,'%d' % int(height), ha='center', va='bottom')
However, the bar chart does appears without the values on the bar which is shown below.
IN: code(data['coast'])
OUT:
But the below error message appears
---------------------------------------------------------------------------
TypeError: 'AxesSubplot' object is not iterable
---------------------------------------------------------------------------
How could I resolve the above error to get the below bar chart.
Solution
As @Henry Ecker commented, you should be iterating over ax.patches. The pandas plot function is returning the axis not the patches/rectangles.
df = pd.DataFrame({
'coast': np.random.choice(['Cat1','Cat2'], size=20000, p=[0.9, 0.1])
})
def code(c):
plt.rc('figure', figsize=(10, 5))
ax = c.value_counts().plot(kind='bar')
for value in ax.patches:
height = value.get_height()
plt.text(value.get_x() + value.get_width()/2.,
1.002*height,'%d' % int(height), ha='center', va='bottom')
code(df.coast)
Alternatively, just make the plot and get your own value counts. The X axis for bar charts is just an array 0 to number of bars (2 in this case).
df = pd.DataFrame({
'coast': np.random.choice(['Cat1','Cat2'], size=20000, p=[0.9, 0.1])
})
def code(c):
plt.rc('figure', figsize=(10, 5))
counts = c.value_counts()
ax = counts.plot(kind='bar')
for i in range(len(counts)):
ax.text(
x = i,
y = counts[i] + 600,
s = str(counts[i]),
ha = 'center', fontsize = 14
)
ax.set_ylim(0,25000)
code(df.coast)
Answered By - Coup
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.