我想在一个非常基本的熊猫系列上做直方图。例如下面,我只想让x轴显示"冰淇淋","巧克力"和"咖啡",以及y轴显示2,3,1(计数)。这可能吗?请注意,第一列不按顺序排列,因为我已过滤掉NaN值。
print(data_null_false)
45 ice-cream
101 chocolate
102 ice-cream
103 coffee
112 chocolate
120 chocolate
fig, ax = plt.subplots()
ax.hist(rbr_null_false)
plt.show()
导致以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-7d1a5e1bb62b> in <module>()
28
29 fig, ax = plt.subplots()
---> 30 ax.hist(rbr_null_false)
31 #plt.xlabel('index', fontsize=12);
32 #plt.ylabel('prod_rollback_date', fontsize=12);
~/anaconda3/lib/python3.5/site-packages/matplotlib/__init__.py in inner(ax, *args, **kwargs)
1810 warnings.warn(msg % (label_namer, func.__name__),
1811 RuntimeWarning, stacklevel=2)
-> 1812 return func(ax, *args, **kwargs)
1813 pre_doc = inner.__doc__
1814 if pre_doc is None:
~/anaconda3/lib/python3.5/site-packages/matplotlib/axes/_axes.py in hist(self, x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)
5993 xmax = -np.inf
5994 for xi in x:
-> 5995 if len(xi) > 0:
5996 xmin = min(xmin, xi.min())
5997 xmax = max(xmax, xi.max())
TypeError: len() of unsized object
答案 0 :(得分:2)
虽然你说你想要一个直方图,但它实际上是一个条形图。 &#34; A histogram是数字数据分布的精确图形表示。&#34;您的示例是分类数据。所以:
import io
import matplotlib.pyplot as plt
import pandas as pd
data = """45 ice-cream
101 chocolate
102 ice-cream
103 coffee
112 chocolate
120 chocolate"""
df = pd.read_table(io.StringIO(data), header=None)
s = df[1]
s.value_counts().plot(kind='bar')
plt.show()