matplotlib在x轴上带有字符串的直方图

时间:2017-06-21 03:24:47

标签: pandas numpy matplotlib histogram

我想在一个非常基本的熊猫系列上做直方图。例如下面,我只想让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

1 个答案:

答案 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()

enter image description here