zoukankan      html  css  js  c++  java
  • 数据可视化实例(十五):有序条形图(matplotlib,pandas)

    偏差 (Deviation)

    有序条形图 (Ordered Bar Chart)

    有序条形图有效地传达了项目的排名顺序。 但是,在图表上方添加度量标准的值,用户可以从图表本身获取精确信息。

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

    导入所需要的库

    import numpy as np              # 导入numpy库
    import pandas as pd             # 导入pandas库
    import matplotlib as mpl        # 导入matplotlib库
    import matplotlib.pyplot as plt
    import seaborn as sns           # 导入seaborn库

    设定图像各种属性

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

    程序代码

    # step1:导入数据
    df_raw = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")
    df = df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x:x.mean())
    df.sort_values('cty', inplace = True)
    df.reset_index(inplace = True)
    
    # step2:绘制有序条形图
        # 创建画布对象以及子图对象
    fig,ax = plt.subplots(figsize = (16, 10),    # 画布尺寸
                         facecolor = 'white',    # 画布颜色
                         dpi = 80)               # 分辨率
        # 绘制柱状图
    ax.vlines(x = df.index,                 # 横坐标
             ymin = 0,                      # 柱状图在y轴的起点
             ymax = df.cty,                 # 柱状图在y轴的终点
             color = 'firebrick',           # 柱状图的颜色
             alpha = 0.7,                   # 柱状图的透明度
             linewidth = 20)                # 柱状图的线宽
    
    # step3:添加文本
        # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,
    for i, cty, in enumerate(df.cty):       
        ax.text(i,                                  # 文本的横坐标位置
                cty+0.5,                            # 文本的纵坐标位置
                round(cty, 1),                      # 对文本中数据保留一位小数
                horizontalalignment = 'center')     # 相对于xy轴,水平对齐
    
    # step4:装饰
    ax.set_title('Bar Chart for Highway Mileage',   # 子图标题名称
                fontdict = {'size': 22})            # 标题字体尺寸
    ax.set(ylabel = 'Miles Per Gallon',             # 纵坐标的标题名称
          ylim = (0,30))                            # 纵坐标的取值范围
        # 横坐标的刻度标尺
    plt.xticks(df.index,                            # 横坐标的刻度位置
              df.manufacturer.str.upper(),          # 刻度标尺的内容(先转化为字符串,再转换为大写)
              rotation = 60,                        # 旋转角度
              horizontalalignment = 'right',        # 相对于刻度标尺右移
              fontsize = 12)                        # 字体尺寸
    
    # step5:添加补丁
        # 添加绿色的补丁
    p1 = patches.Rectangle((0.57, -0.005),                # 矩形左下角坐标 
                          width = 0.33,                   # 矩形的宽度
                          height = 0.13,                  # 矩形的高度
                          alpha = 0.1,                    # 矩阵的透明度
                          facecolor = 'green',            # 是否填充矩阵(设置为绿色)
                          transform = fig.transFigure)    # 保持矩形显示在图像最上方
        # 添加红色的补丁
    p2 = patches.Rectangle((0.124, -0.005),               # 矩形左下角坐标
                          width = 0.446,                   # 矩形的宽度
                          height = 0.13,                  # 矩形的高度
                          alpha = 0.1,                    # 矩阵的透明度
                          facecolor = 'red',              # 是否填充矩阵(设置为红色)
                          transform = fig.transFigure)     # 保持矩形显示在图像最上方
        # 将补丁添加至画布
    fig.add_artist(p1)    # 将p1添加至画布上
    fig.add_artist(p2)    # 将p2添加至画布上
    plt.show()            # 显示图像

    matplotlib.pyplot.vlines

    matplotlib.pyplot.vlines(x, ymin, ymax, colors='k', linestyles='solid', label='', *, data=None, **kwargs)[源代码]

    绘制垂直线。

    在每个位置绘制垂直线 x 从 ymin 到 ymax .

    参数:
    x 标量或一维数组

    x-绘制线条的索引。

    YMIN,YMAX 标量或一维数组

    每行的开始和结束。如果提供标量,则所有行的长度都相同。

    colors 类似颜色的数组,可选,默认值:“k”
    直线运动 'solid'、'dashdot'、'dashdot'、'dotted',可选
    标签 字符串,可选,默认:“”
    返回:
    线 : LineCollection LineCollection
    其他参数:
    **kwargs : LineCollection 性质。 LineCollection属性。
  • 相关阅读:
    VS2008找不到MFC90d.dll错误解决方法
    字符编码之间的转换
    java 中使用RSA非对称性加密解密
    java eclipse中使用wsdl生成soap 的客户端代码
    java 打印空心菱形的两种实现
    Chrome 快捷键
    电脑常用快捷键
    VS2013常用快捷键
    Eclipse常用快捷键
    java 使用for循环打印杨辉三角形
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12926611.html
Copyright © 2011-2022 走看看