zoukankan      html  css  js  c++  java
  • matplotlib

    五、Matplotlib:绘图和可视化

    • 简介
    • 简单绘制线形图
    • plot函数
    • 支持图类型
    • 保存图表

    1、简介

    Matplotlib是一个强大的Python绘图和数据可视化的工具包。数据可视化也是我们数据分析的最重要的工作之一,可以帮助我们完成很多操作,例如:找出异常值、必要的一些数据转换等。完成数据分析的最终结果也许就是做一个可交互的数据可视化。

    安装方式:

    pip install matplotlib

    引用方法:

    import matplotlib.pyplot as plt

    2、简单绘制线形图

    plt.plot()   # 绘图函数
    plt.show()   # 显示图像

    在jupyter notebook中不执行这条语句也是可以将图形展示出来

    import matplotlib.pyplot as plt
    import numpy as np
    data = np.arange(10)
    plt.plot(data)
    plt.show() # 显示图像,在notebook中不执行这一句也可以

    执行结果:

     虽然seaborn这些库和pandas的内置绘图函数能够处理许多普通的绘图任务,如果需要自定义一些高级功能的话就必须要matplotlib API.

    3、plot函数

    plot函数:绘制折线图

    • 线型linestyle(-,-.,--,..)
    • 点型marker(v,^,s,*,H,+,X,D,O,...)
    • 颜色color(b,g,r,y,k,w,...)

      plt.rcParams['font.sans-serif'] = ['SimHei']   # 设置字体样式
      plt.rcParams['axes.unicode_minus'] = False     # 自动转编码 允许中文可以显示


    plt.plot([0,3,9,15,30],linestyle = '-.',color = 'r',marker = 'o') # linestyle:折线样式 color:颜色 marker:节点标记

     图像标注:

    方法描述 
    plt.title() 设置图像标题  
    plt.xlabel() 设置x轴名称  
    plt.ylabel() 设置y轴名称  
    plt.xlim() 设置x轴范围  
    plt.ylim() 设置y轴范围  
    plt.xticks() 设置x轴刻度  
    plt.yticks() 设置y轴刻度  
    plt.legend() 设置曲线图例
    plt.plot([0,3,9,15,30],linestyle = '-.',color = 'r',marker = 'o',label="A") 
    plt.plot([1,3,16,23,30],[30,23,13,25,30],label='B')
    plt.title("Title")  # 标题
    plt.xlabel('X')  # x轴名称
    plt.ylabel('Y')  # y轴名称
    
    plt.xticks(np.arange(0,30,2))  # x轴刻度
    plt.xlim(-0.2,10,2)  # x轴范围
    plt.legend()  # 曲线图例

    运行图例:

    绘制数学函数:

    使用Matplotlib模块在一个窗口中绘制数学函数y=x, y=x**2,y=sinx的图像,使用不同颜色的线加以区别,并使用图例说明各个线代表什么函数。 

    x = np.arange(-100,100)
    y1 = x
    y2 = x ** 2
    y3 = np.sin(x)
    -----------------------
    plt.plot(x,y1,label="y=x")
    plt.plot(x,y2,label="y=x^2")
    plt.plot(x,y3,label="y=sin(x)")
    
    plt.ylim(-100,100)
    plt.legend()

    运行结果:

    4、支持的图类型

    函数说明 
    plt.plot(x,y,fmt) 坐标系  
    plt.boxplot(data,notch,position) 箱型图  
    plt.bar(left,height,width,bottom) 柱状图  
    plt.barh(width,bottom,left,height) 横向柱状图  
    plt.polar(theta,r) 极坐标系  
    plt.pie(data,explode) 饼图  
    plt.psd(x,NFFT=256,pad_to,Fs) 功率谱密度图  
    plt.specgram(x,NFFT=256,pad_to,F) 谱图  
    plt.cohere(x,y,NFFT=256,Fs) X-Y相关性函数  
    plt.scatter(x,y) 散点图  
    plt.step(x,y,where) 步阶图  
    plt.hist(x,bins,normed) 直方图

    #
    柱状图 data = [12,34,23,54] labels = ['Jan','Fed','Mar','Apr'] plt.xticks([0,1,2,3],labels) # 设置x轴刻度 plt.bar([0,1,2,3],data)

    # 横向柱状图
    data = [12,34,23,54]
    labels = ['Jan','Fed','Mar','Apr']
    plt.yticks([0,1,2,3],labels)
    plt.barh([0,1,2,3],data)    

    # DataFrame数组图
    df = pd.DataFrame({
        'Jan':pd.Series([1,2,3],index=['a','b','c']),
        'Fed':pd.Series([4,5,6],index=['b','a','c']),
        'Mar':pd.Series([7,8,9],index=['b','a','c']),
        'Apr':pd.Series([2,4,6],index=['b','a','c'])
    })
    df.plot.bar()  # 水平柱状图,将每一行中的值分组到并排的柱子中的一组
    df.plot.barh(stacked=True,alpha=0.5)  # 横向柱状图,将每一行的值堆积到一起

    # 饼图
    plt.pie([10,20,30,40],labels=list('abcd'),autopct="%.2f%%",explode=[0.1,0,0,0])  # 饼图
    plt.axis("equal")
    plt.show()

    # 散点图
    import random
    x = np.random.randn(100)
    y = np.random.randn(100)
    plt.scatter(x,y)

    5、保存图表到文件

     plt.savafig('文件名.拓展名')

     文件类型是通过文件扩展名推断出来的。因此,如果你使用的是.pdf,就会得到一个PDF文件。

    plt.savefig('123.pdf')

    savefig并非一定要写入磁盘,也可以写入任何文件型的对象,比如BytesIO:

    from io import BytesIO
    buffer = BytesIO()
    plt.savefig(buffer)
    plot_data = buffer.getvalue()
    参数说明 
    fname 含有文件路径的字符串或者Python的文件型对象。  
    dpi 图像分辨率,默认为100  
    format 显示设置文件格式("png","jpg","pdf","svg","ps",...)  
    facecolor、edgecolor 背景色,默认为"W"(白色)  
    bbox_inches 图表需要保存的部分。设置为”tight“,则尝试剪除图表周围空白部分

     练习题:

    测试数据连接:https://share.weiyun.com/5WO0KMA

     1.绘制每个国家或者地区的电影数量的柱状图

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.figure(figsize=(13,6))   # 设置画布大小
    
    df = pd.read_csv('./douban_movie.csv')  # 读取文件
    
    
    
    res = df.groupby('产地').size().sort_values(ascending=False)  # 以产地分组 进行排序
    
    plt.title('每个国家或者地区的电影数量', fontsize=20)
    
    x = res.index  # 产地作为x轴
    
    y = res.values           # 值作为y轴
    
    plt.xlabel('产地', fontsize=20,color='blue')
    
    plt.xticks(rotation=90, fontsize=15) 
    plt.ylabel('数量',fontsize=20,color='red')
    
    for a, b in zip(x,y):  # 通过zip将x y进行映射
        plt.text(a, b+100, b, horizontalalignment='center', fontsize=13) # a:x轴 b:y轴 horizontalalignment:水平居中 b+100:不要紧挨柱子
    
    plt.bar(x,y)    # 绘制树状图
    
    plt.show()
    绘制每个国家或者地区的电影产量

     2.绘制每年电影上映数量的曲线图

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.figure(figsize=(13,6))  # 设置画布大小
    
    plt.title('每年电影上映数量的曲线图',fontsize=15,color='black')
    
    
    plt.xlabel('年代',fontsize=20,color='red')
    plt.ylabel('数量',fontsize=20,color='blue')
    
    df = pd.read_csv('./douban_movie.csv')  # 读取文件
     
    res = df.groupby('年代').size().sort_index()[:-2]  # 按照索引进行排序  切除不需要的脏数据
    x = res.index   # 获取x轴的值
    y = res.values  # 获取y轴的值
    
    
    plt.plot(x,y)   # 绘制折线图
    plt.show()      # 展示
    绘制每年电影上映数量的曲线图

    3:根据电影的长度绘制饼图

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    
    plt.title('电影时长分布图',fontsize=15,color='black')
    
    plt.figure(figsize=(10,13))  # 设置画布大小
    df = pd.read_csv('./douban_movie.csv')  # 读取文件
    
    df_res = df['时长']
    res = pd.cut(df_res,[0,60,90,120,150,180,210])   # df_res被切割的数据 列表为切割的范围
    res1 = res.value_counts()    # 获取在一定分为内值的个数
    
    x = res1.index
    y = res1.values
    patch, l_text, p_text = plt.pie(y, labels = x, autopct='%.2f%%')   # autopct:百分比展示
    
    for p in p_text:
        p.set_size(15)
        p.set_color('white')
    
    for l in l_text:
        l.set_size(13)
        l.set_color('r')
        
    plt.pie(res1)              # 设置饼状图
    
    plt.show()
    根据电影的长度绘制饼图
  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/SR-Program/p/11983710.html
Copyright © 2011-2022 走看看