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

如何在python中为非数字变量制作直方图,python,pandas,dataframe,matplotlib,histogram,Python,Pandas,Dataframe,Matplotlib,Histogram,样本数据 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,

样本数据

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
现在我想用matplotlib和pandas绘制一个直方图,这里是描述

  • X轴:四分之一
  • Y轴:值的计数
  • 直方图箱:充满品牌,如2017Q2,有MS和Apple两种颜色值
  • 传奇:品牌名称
我有一个R背景,使用ggplot非常容易,我想在Python中也这么做,但我没有找到任何合适的代码,我得到了下面提到的错误

TypeError: Empty 'DataFrame': no numeric data to plot
我相信你需要用,然后用或重塑

最后绘图人:


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

plt.style.use('ggplot')

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

plt.show()

作为参考,这是绘制的图-

brand    Apple  Google   MS
quarter                    
2015Q1     1.0     NaN  NaN
2016Q1     NaN     1.0  NaN
2017Q2     1.0     NaN  2.0
另一种选择
data\u frame.attribute\u name.value\u counts().plot.bar()

例子
iris\u数据。示例(3)

iris\u数据.物种.值\u计数().plot.bar()


引发错误的代码是什么?请显示导致此错误的代码。向我们显示R中ggplot输出的样子?我缺少group by,因此它将其转换为数值,R不需要任何此类group by,因此我也不希望出现此错误,谢谢您的帮助reply@Vineet不客气。我想你也会欣赏来自R的
ggplot
风格的绘图。
brand    Apple  Google   MS
quarter                    
2015Q1     1.0     NaN  NaN
2016Q1     NaN     1.0  NaN
2017Q2     1.0     NaN  2.0