• Python可视化库Matplotlib的使用


    在做完数据分析后,有时候需要将分析结果一目了然地展示出来,此时便离不开Python可视化工具,Matplotlib是Python中的一个2D绘图工具,是另外一个绘图工具seaborn的基础包

    先总结下绘制子图的步骤:

    1.确定绘制的图形形状(如折线图/条状图/柱状图/饼图/散点图等)
    2.填充x/y轴的数据
    3.图形细节调整(这里可以做很多调整,如x/y轴文字参数说明,颜色/线粗/柱状粗度,x/y轴文字角度等)
    4.显示图像(调用show())

    总结下一个区域同时绘制多个子图的步骤

    1.确定绘图区域大小
    2.确定每个子图在绘图区域的位置
    3.绘制每个子图(步骤如上)
    4.显示图像(调用show())

    绘制折线图

    需求:根据一张美国的失业率数据,绘制出1948年12个月中的失业率折线图,其中x轴表示月份,y轴表示失业率

    数据如下

           DATE  VALUE
    0  1948-01-01    3.4
    1  1948-02-01    3.8
    2  1948-03-01    4.0
    3  1948-04-01    3.9
    4  1948-05-01    3.5
    5  1948-06-01    3.6
    6  1948-07-01    3.6
    7  1948-08-01    3.9
    8  1948-09-01    3.8
    9  1948-10-01    3.7
    10 1948-11-01    3.8
    11 1948-12-01    4.0

    unrate.csv
    上代码

    #导包
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 读取本地的csv文件,里面的数据为美国失业率数据,得到的数据为DataFrame类型
    unrate = pd.read_csv('unrate.csv')
    
    # 使用pd中的pd.to_datetime函数将DATE列的字符串类型数据转换成pd中的标准时间格式
    unrate['DATE'] = pd.to_datetime(unrate['DATE'])
    
    # 取出前面12条样本数据
    first_twelve = unrate[0:12]
    
    # 填充数据并绘制折线图,第一个参数为x轴数据,第二个参数为y轴数据
    plt.plot(first_twelve['DATE'], first_twelve['VALUE'])
    
    # 将x轴下面文字旋转90度
    plt.xticks(rotation=90)
    
    # 设置x轴的标签
    plt.xlabel('Month')
    
    # 设置y轴的标签
    plt.ylabel('Unemployment Rate')
    
    # 设置图标名称
    plt.title('Monthly Unemployment Trends, 1948')
    
    # 显示图像
    plt.show()

    图像如图所示:

    在一个区域绘制多个子图

    有时候,需要将多张图像在一块区域显示,方便对比

    上代码:

    # 导包
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 确定总绘图区宽和高分别为都是3x6
    fig = plt.figure(figsize=(3, 6))
    
    # 添加第一个子图,并且确定在总绘图区域的位置,add_subpolt(2,1,1),前两个参数参数2,1表示将总绘图区域划分为两行1列(跟矩阵表示很像)
    # 第3个参数表示该子图占总区域的第一个位置.注(将总区域分成2行1列后,位置顺序从上到下,从左到右,从1开始递增)
    ax1 = fig.add_subplot(2,1,1)
    ax2 = fig.add_subplot(2,1,2)
    
    # 绘制子图
    ax1.plot(np.random.randint(1,5,5), np.arange(5))
    ax2.plot(np.arange(10)*3, np.arange(10))
    
    # 显示图像
    plt.show()

    图像如图所示

    在一张图中同时绘制多条曲线

    需求:在同一张图,同时将1948到1952年的失业率展示出来,曲线使用不同的颜色区分

    上代码

    #绘制5年内的失业率曲线图
    
    #导包
    import numpy as np
    import pandas as pd
    import matplotlib.pypolt as plt
    
    # 读取本地数据
    unrate=pd.read_csv('UNRATE.csv')
    
    # 将字符串时间转换成pd中的时间格式
    unrate['DATE']=pd.to_datetime(unrate['DATE'])
    
    # 将年份时间转换成月份时间,并新建列存起来,因为需求需要将5年内的当年12个月内的失业率展示出来,此时再用年时间作为x轴下标就不合适了
    unrate['MONTH']=unrate['DATE'].dt.month
    
    # 设置5个颜色数组,分别表示5条曲线颜色
    colors=['red','green','blue','black','yellow']
    
    # 设置总绘图区域大小,需要在调用绘图函数之前调用才有效果
    plt.figure(figsize=(10,6))   
    
    #遍历5次
    for i in range(5):
        
    
        #取出当年12个月的数据     
        data12=unrate[12*i:12*(i+1)]
        
        #x轴数据
        data_x=data12['MONTH']
        
        #y轴数据
        data_y=data12['VALUE']
        
        #当年的曲线的标签
        label=str(1948+i)
            
        # 绘制当年的曲线图
        plt.plot(data_x,data_y,c=colors[i],label=label)
    
        
    # 设置x轴标签
    plt.xlabel('MONTH')
    
    # 设置y轴标签
    plt.ylabel('unrate')
    
    # 设置图标名称
    plt.title('US-unrae,1948-1952')
    
    # 设置曲线标签说明,loc='best'表示自己选择合适的位置来摆放
    plt.legend(loc='best')
    
    # 显示图像
    plt.show()

    得到的图像:

    绘制条形图

    直方图和条形图的区别:由于分组数据具有连续性,直方图中的各矩形通常是连续排列,而条形图则是分开排列。此外直方图的高度表示各小组内数据个数,而条形图高度表示某项目内的数据个数。

    fandango_scores.csv
    上代码:

    # 导包
    import pandas as pd
    import matplotlib.pyplot as plt
    from numpy import arange
    
    # 读取电影评分数据
    reviews = pd.read_csv('fandango_scores.csv')
    
    # 取出需要展示的列名
    cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
    
    # 取出需要展示的样本数据
    norm_reviews = reviews[cols]
    
    # 评分数据的列名
    num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
    
    # 取出第一部电影的评分样本数据
    bar_heights = norm_reviews.loc[0, num_cols].values
    
    # 条形图的位置
    bar_positions = arange(5) + 0.75
    
    
    tick_positions = range(1,6)
    fig, ax = plt.subplots()
    
    # 绘制条形图,第一个参数为x轴数据,第二个参数为y轴数据,第三个参数为每个条形的宽度
    ax.bar(bar_positions, bar_heights,0.5)
    
    # 设置x轴标签的位置
    ax.set_xticks(tick_positions)
    
    # 设置x轴标签的名字和角度
    ax.set_xticklabels(num_cols, rotation=45)
    
    # 设置x轴标签
    ax.set_xlabel('Rating Source')
    
    # y轴标签
    ax.set_ylabel('Average Rating')
    
    # 标题
    ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
    plt.show()

    绘制的图片:

    绘制直方图

    直方图一般用来统计一定范围内的数据

    上代码

    import pandas as pd
    import matplotlib.pyplot as plt
    reviews = pd.read_csv('fandango_scores.csv')
    cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
    norm_reviews = reviews[cols]
    
    # 对评分进行数量统计
    fandango_distribution = norm_reviews['Fandango_Ratingvalue'].value_counts()
    
    # 排序索引
    fandango_distribution = fandango_distribution.sort_index()
    
    imdb_distribution = norm_reviews['IMDB_norm'].value_counts()
    imdb_distribution = imdb_distribution.sort_index()
    
    fig, ax = plt.subplots()
    
    # 绘制直方图
    ax.hist(norm_reviews['Fandango_Ratingvalue'],bins=20)
    
    plt.show()

    绘制所得图像:

    绘制散点图

    上代码:

    # 导包
    import pandas as pd
    import matplotlib.pyplot as plt
    from numpy import arange
    
    # 读取电影评分数据
    norm_reviews = pd.read_csv('fandango_scores.csv')
    
    # 取出需要展示的列名
    cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
    
    # 取出需要展示的样本数据
    norm_reviews = reviews[cols]
    
    fig, ax = plt.subplots()
    
    #绘制散点图
    ax.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm'])
    ax.set_xlabel('Fandango')
    ax.set_ylabel('Rotten Tomatoes')
    plt.show()

    绘制所得图片:

    绘制盒图

    箱形图(英文:Box-plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。在各种领域也经常被使用,常见于品质管理。不过作法相对较繁琐。它能显示出一组数据的最大值、最小值、中位数、下四分位数及上四分位数。

    上代码:

    import pandas as pd
    import matplotlib.pyplot as plt
    reviews = pd.read_csv('fandango_scores.csv')
    cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
    norm_reviews = reviews[cols]
    
    num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
    fig, ax = plt.subplots()
    
    #绘制盒图
    ax.boxplot(norm_reviews[num_cols].values)
    ax.set_xticklabels(num_cols, rotation=90)
    ax.set_ylim(0,5)
    plt.show()

    绘制所得图片:


     
  • 相关阅读:
    2016/05/16 thinkphp3.2.2 验证码使用
    2016/05/16 UEditor 文本编辑器 使用教程与使用方法
    2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里
    DropzoneJS 使用指南
    MVC设计模式
    Smarty 配置文件的读取
    会话控制
    JS中的call和apply
    CSS选择器
    XML
  • 原文地址:https://www.cnblogs.com/liuys635/p/11136587.html
Copyright © 2020-2023  润新知