python实现读取类别频数数据画水平条形图

1、数据分组-->频数分布表

环境配置:

1 import pandas as pd
2 import numpy as np
3 import matplotlib.pyplot as plt

按照你设定合适的间隔,把数据分为各个范围的组,然后统计出在这个范围内的频数有多少,我没有找到合适的函数,我就自己写了一个函数,类似直方图的工作,这是画水平条形图的数据准备。至于为什么要画水平条形图,当类别太多,使用水平条形图比较简洁,个人看法。下面给出代码,就不解释代码含义了。

 1 def data_count(dataa, r1, r2, step):
 2     r = pd.DataFrame(np.random.randn(1, 2))
 3     r.drop(0, inplace=True)
 4     while r1+step <= r2:
 5         num = 0
 6         for j in range(len(dataa)):
 7             if dataa[j] >= r1 and dataa[j] < r1+step:
 8                 num = num + 1
 9         f = "%s~%d" % (r1, r1+step)
10         # r = r.append([[int(r1), num], ]) # 使用单数表示
11         r = r.append([[f, num], ])  # 使用范围表示
12         r1 = r1 + step
13     return r

 要注意的数据范围只包含上界不含下界,数据公式这样子${\text{1}} \leqslant data < 5$,只含上界,这样就可以做出不重不漏。

2、频数计算

这是运用data_count函数(上面代码)进行频数计算的演示,首先看一下原数据长什么样,暂时麻烦就不公布了,你们自己按照自己的数据决定。

原数据

测试data_count函数代码:

1 data_gap1 = data_count(g11[:], 1, 51, 1)
2 data_gap2 = data_count(g22[:], 1, 51, 1)

很简单啦,就是函数的调用,你们都会的,给大家看一下输出结果,如下图:

输出结果

感觉相当完美,函数也很万能,只要输入最小值最大值和间隔,就能出频数分布表

 

3、水平条形图

def plot_bar(plot_data, title):
    plt.figure(figsize=(10, 15))
    y = plot_data.iloc[:, 1].values
    tt = list(range(len(y)))
    index = plot_data.iloc[:, 0].values
    plt.bar(left=0, bottom=list(range(len(y))), width=y, color='blue', height=0.5,
            orientation='horizontal')  # 水平对应bottom&width, height表示bar的宽度
    plt.yticks(tt, index)
    plt.ylabel('数据范围')
    plt.xlabel('频数')
    plt.title(title)
    plt.show()

上面中plt.bar(left=0, bottom=list(range(len(y))), width=y, color='blue', height=0.5,orientation='horizontal')这句代码是最重要的,其中left表示直方图的开始的位置(也就是最左边的地方),height是指直方图的高度,当直方图太粗时,可以通过width来定义直方图的宽度,注意多个直方图要用元组,yerr这个参数是防止直方图触顶。orientation='horizontal'指得水平条形图,使用barh方法可以省略这个参数得设定。

有个坑,如果直接用bottom=类别数据,文本格式的类别会乱序,需要像我那样先指定位置,在指定类别,如plt.yticks(tt, index)所作的工作。

水平条形图

 

转载于:https://www.cnblogs.com/Yuanjing-Liu/p/9341843.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值