• 数据可视化实例(八): 边缘直方图(matplotlib,pandas)


    https://datawhalechina.github.io/pms50/#/chapter6/chapter6

    边缘直方图 (Marginal Histogram)

    边缘直方图具有沿 X 和 Y 轴变量的直方图。 这用于可视化 X 和 Y 之间的关系以及单独的 X 和 Y 的单变量分布。 这种图经常用于探索性数据分析(EDA)。

    导入所需要的库

    # 导入numpy库
    import numpy as np
    # 导入pandas库
    import pandas as pd
    # 导入matplotlib库
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    # 导入seaborn库
    import seaborn as sns
    # 在jupyter notebook显示图像
    %matplotlib inline

    设定图像各种属性

    large = 22; med = 16; small = 12
                # 设置子图上的标题字体
    params = {'axes.titlesize': large,  
                # 设置图例的字体
              'legend.fontsize': med,
                # 设置图像的画布
              'figure.figsize': (16, 10),  
                # 设置标签的字体
              'axes.labelsize': med, 
                # 设置x轴上的标尺的字体
              'xtick.labelsize': med,  
                # 设置整个画布的标题字体
              'ytick.labelsize': med,  
              'figure.titlesize': large}  
    # 更新默认属性
    plt.rcParams.update(params)  
     # 设定整体风格
    plt.style.use('seaborn-whitegrid')
    # 设定整体背景风格
    sns.set_style("white")  

    程序代码

    # step1:导入数据

    df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")

    # step2:创建子图对象与网格

        # 画布
    
    fig = plt.figure(figsize = (16, 10),     # 画布大小_(16, 10)
                     dpi = 80,               # 分辨率
                     facecolor = 'white')    # 背景颜色,默认为白色
        # 网格
    
    grid = plt.GridSpec(4,                   # 行数 
                        4,                   # 列数
                        hspace = 0.5,        # 行与行之间的间隔
                        wspace = 0.2)        # 列与列之间的间隔

    # step3:明确子图的位置

        # 确定如图所示散点图的位置
    ax_main = fig.add_subplot(grid[:-1, :-1])
        # 确定如图所示右边直方图的位置
    ax_right = fig.add_subplot(grid[:-1, -1], xticklabels = [], yticklabels = [])
        # 确定如图所示最底下直方图的位置
    ax_bottom = fig.add_subplot(grid[-1, 0:-1], xticklabels = [], yticklabels = [])

    # step4:散点图

        # category__Category是pandas的一种数据类型
        # astype__实现变量类型转换
        # cat__获取分类变量的类别
        # codes__按照类别编码
    ax_main.scatter('displ',             # 横坐标
                   'hwy',                # 纵坐标
                    s = df.cty*4,        # 设置点的尺寸
                   data = df,            # 所使用的数据
                   c = df.manufacturer.astype('category').cat.codes,   # 颜色类别
                    cmap = 'tab10',      # 调色板
                    edgecolors = 'gray', # 边框颜色
                    linewidths = 0.5,    # 线宽
                    alpha = 0.9)          # 透明度

    # step5:右边的直方图

    ax_right.hist(df.hwy,                 # 需要绘图的变量
                 40,                      # 需要分为多少段
                 histtype = 'stepfilled', # 生成一个的线条轮廓
                 orientation = 'horizontal',  # 方位__水平
                 color = 'deeppink')      # 颜色__深粉色

    # step6:底部的直方图

    ax_bottom.hist(df.displ,                # 需要绘图的变量
                  40,                       # 需要分为多少段
                  histtype = 'stepfilled',  # 生成一个的线条轮廓
                  orientation = 'vertical', # 方位__垂直
                  color = 'deeppink')       # 颜色__深粉色
    ax_bottom.invert_yaxis()

    # step7:装饰图像

    ax_main.set(title='Scatterplot with Histograms 
     displ vs hwy',  # 设置标题
                xlabel='displ',             # 横坐标名称
                ylabel='hwy')               # 纵坐标名称
    ax_main.title.set_fontsize(20)          # 设置标题字体大小
        # xaxis.label__x坐标轴的标题
        # yaxis.label__y坐标轴的标题
        # xticklabel__x坐标轴的标尺
        # yticklabel__y坐标轴的标尺
            # 遍历每一个对象并且修改其字体大小
    for item in ([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()):
        item.set_fontsize(14)               # 修改字体大小
    
    xlabels = ax_main.get_xticks().tolist() # 将散点图上的x坐标轴上的标尺提取后转换为list(一位小数)
    ax_main.set_xticklabels(xlabels)        # 将xlabels中的数字设置为散点图上的坐标轴上的标尺
    plt.show()                              # 显示图像

    博文总结

    matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='mid', 
    log=False, color=None, label=None, stacked=False, normed=None)

    关键参数

    x: 数据集,最终的直方图将对数据集进行统计
    bins: 统计的区间分布
    range: tuple, 显示的区间,range在没有给出bins时生效
    density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
    histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
    align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
    log: bool,默认False,即y坐标轴是否选择指数刻度
    stacked: bool,默认为False,是否为堆积状图
  • 相关阅读:
    自动识别文本中最能体现文本的主题和风格的词汇?试想一下,要找到一本 书中使用最频繁的 50 个词
    语言处理任务 NLTK 模块 功能描述
    mysql group by 去重 分类 求和
    isinstance(object, classinfo) class type(name, bases, dict)
    函数式编程 偏函数 生成器 yield
    .bash_profile vs .bashrc
    sh/bash/csh/Tcsh/ksh/pdksh等shell的区别
    从数据库、页面加载速度角度思考 id设计 sku asin
    线性回归
    Oracle OLAP
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12877009.html
Copyright © 2020-2023  润新知