• 数据可视化实例(八): 边缘直方图(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,是否为堆积状图
  • 相关阅读:
    Spark参数优化
    Spark性能优化指南
    Durid的特点
    优秀博客地址
    Kylin的特点
    2017/11/20
    堆、栈、静态存储
    arraylist 和 linkedlist 的区别
    青岛项目遇到的问题
    access specifier
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12877009.html
Copyright © 2020-2023  润新知