精华内容
下载资源
问答
  • python绘制分布直方图
    2020-11-20 19:48:04

    现在人工智能越来越实用,甚至深入到千家万户,随之而来的就是python技术的火爆,今天小猿圈python讲师为你讲解一下绘制频率分布直方图示例,希望对于刚刚自学python的你有一定的帮助。

    9d0192971299

    项目中在前期经常要看下数据的分布情况,这对于探究数据规律非常有用。概率分布表示样本数据的模样,长的好不好看如果有图像展示出来就非常完美了,使用Python绘制频率分布直方图非常简洁,因为用的频次非常高,这里记录下来。还是Python大法好,代码简洁不拖沓~

    如果数据取值的范围跨度不大,可以使用等宽区间来展示直方图,这也是最常见的一种;如果数据取值范围比较野,也可以自定义区间端点,绘制图像,下面分两种情况展示

    1.区间长度相同绘制直方图

    #-*- encoding=utf-8 -*-

    import datetime

    import numpy as np

    import matplotlib.pyplot as plt

    import matplotlib

    zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')

    # 按照固定区间长度绘制频率分布直方图

    # bins_interval 区间的长度

    # margin    设定的左边和右边空留的大小

    def probability_distribution(data, bins_interval=1, margin=1):

    bins = range(min(data), max(data) + bins_interval - 1, bins_interval)

    print(len(bins))

    for i in range(0, len(bins)):

    print(bins[i])

    plt.xlim(min(data) - margin, max(data) + margin)

    plt.title("probability-distribution")

    plt.xlabel('Interval')

    plt.ylabel('Probability')

    plt.hist(x=data, bins=bins, histtype='bar', color=['r'])

    plt.show()

    2.区间长度不同绘制直方图

    #-*- encoding=utf-8 -*-

    import datetime

    import numpy as np

    import matplotlib.pyplot as plt

    import matplotlib

    zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc'

    # 自己给定区间,小于区间左端点和大于区间右端点的统一做处理,对于数据分布不均很的情况处理较友好

    # bins  自己设定的区间数值列表

    # margin  设定的左边和右边空留的大小

    # label  右上方显示的图例文字

    """e

    import numpy as np

    data = np.random.normal(0, 1, 1000)

    bins = np.arange(-5, 5, 0.1)

    probability_distribution_extend(data=data, bins=bins)

    """

    def probability_distribution_extend(data, bins, margin=1, label='Distribution'):

    bins = sorted(bins)

    length = len(bins)

    intervals = np.zeros(length+1)

    for value in data:

    i = 0

    while i < length and value >= bins[i]:

    i += 1

    intervals[i] += 1

    intervals = intervals / float(len(data))

    plt.xlim(min(bins) - margin, max(bins) + margin)

    bins.insert(0, -999)

    plt.title("probability-distribution")

    plt.xlabel('Interval')

    plt.ylabel('Probability')

    plt.bar(bins, intervals, color=['r'], label=label)

    plt.legend()

    plt.show()

    Case示例

    if __name__ == '__main__':

    data = [1,4,6,7,8,9,11,11,12,12,13,13,16,17,18,22,25]

    probability_distribution(data=data, bins_interval=5,margin=0)

    以上就是小猿圈python讲师给大家分享的绘制频率分布直方图示例,希望对小伙伴们有所帮助Python交流群:874680195,想要了解更多内容的小伙伴可以到小猿圈直接观看,想要学好Python开发技术的小伙伴快快行动吧。

    更多相关内容
  • python绘制分布直方图

    千次阅读 2019-10-05 20:05:51
    (一)绘制频数分布直方图 频数分布直方图使用matplotlib.pyplot下的hist方法 (1)hist(a,bins)方法(a数据列表,bins为组数) (2)组数的计算方法: a)组距:指每个小组的两个端点的距离 b)组数=极差/组距 题目...

    (一)绘制频数分布直方图

    频数分布直方图使用matplotlib.pyplot下的hist方法
    (1)hist(a,bins)方法(a数据列表,bins为组数)
    (2)组数的计算方法:
    a)组距:指每个小组的两个端点的距离
    b)组数=极差/组距

    题目:假设你爬取250部电影的播放时长(如a),统计出数据的分布状态(如100-120分钟出现的数量,或频率)
    a=[131,98,125,131,124,139,131,117,128,108,135,138,131,102,107
    ,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]

    代码如下

    #绘制频数分布直方图
    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    my_font = font_manager.FontProperties(fname=r'./shuxing.TTF')
    
    a = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,
         116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,
         130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,
         125,127,105,120,107,129,116,108,132,103,136,118,112,135,115,146,137,116,103,144,83,123,111,110,111,
         100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,
         125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,
         139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,
         133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]
    #设置组距
    d = 3
    #组数
    num_bin = range(min(a),max(a),d)
    #print(max(a)-min(a),max(a),min(a))
    plt.figure(figsize=(20,8),dpi=80)
    
    plt.hist(a, num_bin)
    plt.xticks(num_bin)
    plt.xlabel('时长/分钟',fontproperties=my_font)
    plt.ylabel('频数',fontproperties=my_font)
    plt.title('250部电影播放时长频数分布直方图',fontproperties=my_font,size=20)
    plt.grid(alpha=0.4)
    
    
    plt.show()
    

    效果展示在这里插入图片描述

    (二)绘制频率分布直方图

    与绘制频数分布直方图相同,都是使用hist方法,只是多调用其内的normed参数

    代码如下

    #绘制频数分布直方图
    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    my_font = font_manager.FontProperties(fname=r'./shuxing.TTF')
    
    a = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,
         116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,
         130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,
         125,127,105,120,107,129,116,108,132,103,136,118,112,135,115,146,137,116,103,144,83,123,111,110,111,
         100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,
         125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,
         139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,
         133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]
    #设置组距
    d = 3
    #组数
    num_bin = range(min(a),max(a),d)
    #print(max(a)-min(a),max(a),min(a))
    plt.figure(figsize=(20,8),dpi=80)
    
    plt.hist(a, num_bin,normed=1)
    plt.xticks(num_bin)
    plt.xlabel('时长/分钟',fontproperties=my_font)
    plt.ylabel('频数',fontproperties=my_font)
    plt.title('250部电影播放时长频数分布直方图',fontproperties=my_font,size=20)
    plt.grid(alpha=0.4)
    
    
    plt.show()
    

    效果展示
    在这里插入图片描述
    数据分析
    通过直方图我们能清晰的得知250部电影播放时长大部分落在100-140分钟之间,频数最大的是播放时长111-114分钟,大多数电影都能将播放时长把控在一个半小时左右。

    展开全文
  • 今天小编就为大家分享一篇Python绘制频率分布直方图的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python绘制概率分布直方图

    千次阅读 2021-12-13 12:46:25
    Python绘制概率分布直方图 文章目录Python绘制概率分布直方图一、代码1、案例一2、案例二二、运行效果1、案例一2、案例二 一、代码 1、案例一 import random import numpy as np import matplotlib.pyplot as plt X...

    Python绘制概率分布直方图

    一、代码

    1、案例一

    import random
    import numpy as np
    import matplotlib.pyplot as plt
    
    X = np.random.normal(loc=10, scale=2, size=(1, 1000))[0]
    
    Y = np.random.normal(loc=10, scale=1.0, size=(1, 1000))[0]
    
    P = np.ones(1000)
    P[:600] = 0
    np.random.shuffle(P)
    # print(P)
    
    Z = X + Y * P
    
    plt.hist(Z, density=True, bins=150)
    plt.show()
    
    

    2、案例二

    import random
    import numpy as np
    import matplotlib.pyplot as plt
    
    n = 1000
    # p = 0.4
    U = []
    
    for i in range(1000):
    
    
        X = np.random.normal(loc=10, scale=2, size=(1, n))[0]
    
        Y = np.random.normal(loc=10, scale=1.0, size=(1, n))[0]
    
        P = np.ones(n)
        P[:600] = 0
        np.random.shuffle(P)
    
        Z = X + Y * P
    
        a = 1 / pow(n * np.var(Z), 1/2)
    
        b = sum(Z) - n * np.mean(Z)
    
        u = a * b
    
        U.append(u)
    
    plt.hist(U, density=True, bins=60)
    plt.show()
    
    

    二、运行效果

    1、案例一

    在这里插入图片描述

    2、案例二

    在这里插入图片描述
    最后,感谢大家的阅读与支持,谢谢大家了啦。

    展开全文
  • Python绘制频率分布直方图和条形图

    千次阅读 2021-12-17 13:12:42
    我们平时做数据分析的时候,经常要了解数据的分布情况,这时候就需要画出频率分布直方图,博主采用的画图工具是python中的seaborn,它的画图效果比matplotlib要好 [1]。 首先需要明确一下直方图和条形图的区别:...

    我们平时做数据分析的时候,经常要了解数据的分布情况,这时候就需要画出频率分布直方图和条形图,博主采用的画图工具是python中的seaborn,它的画图效果比matplotlib要好 [1]。

    首先需要明确一下直方图和条形图的区别:条形图有空隙,直方图没有,条形图一般用于类别特征,直方图一般用于数字特征(连续型)[2]。

    画直方图

    import matplotlib.pyplot as plt
    import seaborn as sns
    
    def draw_distribution_histogram(nums, path, is_hist=True, is_kde=True, is_rug=False, \
      is_vertical=False, is_norm_hist=False):
      """
    
      bins: 设置直方图条形的数目
      is_hist: 是否绘制直方图
      is_kde: 是否绘制核密度图
      is_rug: 是否绘制生成观测数值的小细条
      is_vertical: 如果为True,观察值在y轴上
      is_norm_hist: 如果为True,直方图高度显示一个密度而不是一个计数,如果kde设置为True,则此参数一定为True
      """
      sns.set()  #切换到sns的默认运行配置
      sns.distplot(nums, bins=20, hist=is_hist, kde=is_kde, rug=is_rug, \
        hist_kws={"color":"steelblue"}, kde_kws={"color":"purple"}, \
        vertical=is_vertical, norm_hist=is_norm_hist)
      #添加x轴和y轴标签
      plt.xlabel("XXX")
      plt.ylabel("YYY")
    
      #添加标题
      plt.title("Distribution")
      plt.tight_layout()  # 处理显示不完整的问题
      plt.savefig(path, dpi=300)
      
    x=np.random.randn(100)
    path = "distribution.jpg"
    draw_distribution_histogram(x, path, True, True)
    

    在这里插入图片描述

    画条形图/柱状图

    def draw_bar_chart(nums, path):
      import pandas as pd
      from collections import Counter
      counter = dict(Counter(nums))
      x, y = [], []
      for line in counter.items():
        x.append(line[0])
        y.append(line[1])
      data = pd.DataFrame({"XXX": x, "YYY": y})
      _, ax = plt.subplots(figsize=(12, 8))
      sns.set()  #切换到sns的默认运行配置
      # palette:调色板,控制不同的颜色style
      barplot = sns.barplot(x="XXX", y="YYY", data=data, palette="Set3", capsize=.2)  # Blues_d, Greens_d, Set3
      barplot_fig = barplot.get_figure()
      ax.set_title('Distribution', fontsize=24)
      ax.set_xlabel("XXX", fontsize=18)
      ax.set_ylabel("YYY", fontsize=18)
      plt.tight_layout()  # 处理显示不完整的问题
      for rect in ax.patches:  # 遍历每个柱子对象
          x_left_edge = rect.get_x()  # 得到柱子左边缘的横坐标值
          bar_width = rect.get_width()  # 得到柱子的宽度
          bar_height = rect.get_height()  # 得到柱子的高度
    
          # 设置柱子新宽度
          x_center = x_left_edge + bar_width / 2.
          new_bar_width = 0.1
          rect.set_x(x_center-new_bar_width/2.)  # 移动柱子左边缘的横坐标值
          rect.set_width(new_bar_width)
    
          ax.text(x_center, bar_height,
                  bar_height,
                  ha='center', va='bottom', rotation=0, color='black', fontsize=12)
      barplot_fig.savefig(path, dpi=300)
      
    x = np.random.randint(0, 2, size=100)
    path = "bar_chart.jpg"
    draw_bar_chart(x, path)
    

    在这里插入图片描述

    参考文献

    [1] 绘制频率分布直方图的三种方法,总结的很用心!
    [2] sns.distplot()用法

    展开全文
  • python 频率分布直方图

    千次阅读 2020-10-15 23:36:35
    但在使用hist时存在着如果设置normed,改变bins数量会导致概率变化的问题,因此在绘制分布直方图时需要将bins数量设置为真实的数量。 2.hist参数解析 matplotlib.pyplot.hist( x, bins=10, range=None, normed=...
  • 什么是直方图:一个随机变量在各个取值区间有个概率分布,将其绘制出来:x轴为等间隔的取值区间(bins),y轴为该区间的频数(可归一化),即直方图。 接口 Signature: plt.hist( x, bins=None, range=None, density...
  • Python绘制频率分布直方图项目中在前期经常要看下数据的分布情况,这对于探究数据规律非常有用。概率分布表示样本数据的模样,长的好不好看如果有图像展示出来就非常完美了,使用Python绘制频率分布直方图非常简洁,...
  • 如何使用Python绘制给定数据集的直方图和正态分布曲线。1. 使用记事本创建CSV文件① 新建一个文本文件,打开后输入数据,格式如下:name,age,addressMike,20,shanghai这里需要注意的是:关键字之间使用英文逗号隔开...
  • Python 绘制分布(折线),使用的是 plot()函数。 一个简单的例子: # encoding=utf-8 import matplotlib.pyplot as plt from pylab import * # 支持中文 mpl.rcParams['font.sans-serif'] = ['SimHei'] # '...
  • python绘制直方图

    千次阅读 2022-06-08 15:49:16
    而又让他帮你规划局奴 役天通苑发光碟好过分返回画完
  • python中一般采用matplotlib库的hist来绘制直方图,至于如何给直方图添加拟合曲线(密度函数曲线),一般来说有以下两种方法。 方法一:采用matplotlib中的mlab模块 mlab模块是Python中强大的3D作图工具,立体感...
  • 如何用python画出直方图的包络线拟合直方图Python问题,怎么解决用代码解决: import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import interp1d import scipy.stats as st sim = st....
  • 如何使用Python绘制给定数据集的直方图和正态分布曲线。1. 使用记事本创建CSV文件① 新建一个文本文件,打开后输入数据,格式如下:name,age,addressMike,20,shanghai这里需要注意的是:关键字之间使用英文逗号隔开...
  • 基于python的灰度直方图绘制

    千次阅读 2022-02-27 23:38:08
    import numpy as np import matplotlib.pyplot as plt from skimage import io import cv2 if __name__ == '__main__': imgPath = 'background.png' img = io.imread(imgPath) n, bins, patches = plt.hist(img....
  • import numpy as np import matplotlib.pyplot as plt %config InlineBackend.figure_format = 'retina' np.random.seed(190801) mu = 200 sigma = 25 n_bins = 50 x = np.random.normal(mu, sigma, size=100) ...
  • python plt怎么绘制直方图# /usr/bin/python# -*- coding: utf-8 -*-import numpy as npfrom matplotlib import pyplot as pltdata = np.random.normal(0, 1, 100)bins = np.arange(-10, 10, 1)plt.xlim([min(data)-...
  • python作频率分布直方图

    千次阅读 2020-11-08 23:22:26
    我们在拿到一组数据时,为了观察其大致分布,常常需要绘制其频率分布直方图。下面记录一下今天捯饬了大半天,用pycharm画出频率分布直方图的过程 导入数据并作直方图 import pandas as pd import numpy as np import...
  • 当我们想要弄清楚变量的统计特性时,往往想知道它是服从什么分布的,这时候就需要绘制概率分布直方图python中我们可以使用seaborn库来进行绘制: Seaborn是一个基于matplotlib的Python数据可视化库。它为绘制有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,598
精华内容 4,239
热门标签
关键字:

python绘制分布直方图