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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中为非数字变量制作直方图相关的知识,希望对你有一定的参考价值。

样本数据

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

enter image description here

作为参考,这是绘制的 -

brand    Apple  Google   MS
quarter                    
2015Q1     1.0     NaN  NaN
2016Q1     NaN     1.0  NaN
2017Q2     1.0     NaN  2.0
另一答案

我相信你需要groupbysize,然后重塑unstackcrosstab

最后的情节由DataFrame.plot.bar

df = dummyData.groupby(['quarter','brand']).size().unstack(fill_value=0)
#alternative solution
#df = pd.crosstab(dummyData['quarter'], dummyData['brand'])
print (df)
brand    Apple  Google  MS
quarter                   
2015Q1       1       0   0
2016Q1       0       1   0
2017Q2       1       0   2

df.plot.bar()

graph

另一答案

Another Alternative

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

Example

iris_data.sample(3)

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

以上是关于如何在python中为非数字变量制作直方图的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中为这两个直方图添加图例

如何从 Python 中的字符串列表制作直方图?

在python中制作数据帧的对象属性直方图

在 c++ 中为非托管 c# dll 使用 std::string

如何在导航栏中为非 rootviewcontroller 的 tableviewcontroller 添加编辑按钮

我们如何在 TypeScript 中为非全局接口创建扩展方法?