如何在python中为非数字变量制作直方图

Vin*_*eet 4 python matplotlib histogram dataframe pandas

样本数据

import pandas as pd
import matplotlib.pyplot as plt

dummy = {'id': [1,2,3,4,5], 
        'brand': ['MS', 'Apple', 'MS', 'Google', 'Apple'], 
        'quarter': ['2017Q2', '2017Q2', '2017Q2', '2016Q1', '2015Q1']}

dummyData = pd.DataFrame(dummy, columns = ['id', 'brand', 'quarter'])
dummyData


# id    brand   quarter
# 0 1   MS      2017Q2
# 1 2   Apple   2017Q2
# 2 3   MS      2017Q2
# 3 4   Google  2016Q1
# 4 5   Apple   2015Q1
Run Code Online (Sandbox Code Playgroud)

现在我想使用 matplotlib 和 pandas 绘制直方图,这里是描述

  • X 轴:四分之一
  • Y 轴:值的计数
  • 直方图Bin:填充品牌像2017Q2有MS和Apple的两个颜色值
  • 传奇:品牌名称

我有 R 背景,使用 ggplot 很容易,我想在 Python 中做同样的事情,但我没有找到任何合适的代码,我遇到了下面提到的错误

TypeError: Empty 'DataFrame': no numeric data to plot
Run Code Online (Sandbox Code Playgroud)

Rom*_*nov 7

另一种选择

data_frame.attribute_name.value_counts().plot.bar()

例子

iris_data.sample(3)

鸢尾花数据集样本

iris_data.Species.value_counts().plot.bar()

鸢尾花数据集类条形图


cs9*_*s95 5

IIUC,你可以使用groupby+ count+ unstack+ plot-

plt.style.use('ggplot')

dummyData.groupby(['quarter', 'brand'])\
      .brand.count().unstack().plot.bar(legend=True)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

作为参考,这是绘制的内容-

brand    Apple  Google   MS
quarter                    
2015Q1     1.0     NaN  NaN
2016Q1     NaN     1.0  NaN
2017Q2     1.0     NaN  2.0
Run Code Online (Sandbox Code Playgroud)