matplotlib数据可视化图表

第21章 matplotlib数据可视化开发

Matplotlib是Python的一个数据可视化工具包,可以方便地绘制数据统计相关的图表,如折线图、散点图、直方图等,强大的绘图功能使Python广泛用于数据挖掘领域。

21.1 环境搭建

  1. 使用pip工具安装模块:pip install matplotlib
  2. 安装前需确保Windows系统上已安装visual studio .NET 运行库。

21.2 实现简单绘图

matplotlib有两大子模块,pyplot包含了绘制各种图表的工具,pylab包含了绘制数学曲线工具。

  1. 绘制散点scatter()

    import matplotlib.pyplot as plt
    # 定义样本点横坐标、纵坐标的列表
    xset = [60,85.5,49.2,47.4]
    yset = [18.4,16.8,17.6,16.4]
    # 使用scatter()方法绘制散点,可设为红色
    plt.scatter(xset,yset,c='r')
    # 可以定义坐标轴的范围
    plt.axis([0,90,0,20])
    # 展示图表
    plt.show()
    
  2. 绘制折线plot()

    import matplotlib.pyplot as plt
    # 定义样本点纵坐标的列表
    xset = [0,1,2,3,4,5,6]
    yset = [0,1,4,9,16,25,36]
    set = [0,0.5,2,4.5,8,12.5,18]
    # 使用plot()方法绘制折线
    plt.plot(xset,yset,c='r')
    # 当没有指定横坐标时,默认序列的下标作为横坐标
    plt.plot(set,c='b')
    # 展示图表
    plt.show()
    
  3. 设置标签和线条样式(注意,默认的字体库不显示中文)

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    xset = [0,1,2,3,4,5,6]
    yset = [0,1,4,9,16,25,36]
    plt.plot(xset,yset,c='r',linewidth='5')
    # 模块的全局对象,导入字体库设置字体
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    # 设置图表的标签说明
    plt.title("示例图表",fontsize=24)
    plt.xlabel("横坐标",fontsize=14)
    plt.ylabel("纵坐标",fontsize=14)
    # 设置刻度的样式
    plt.tick_params(axis='both',labelsize=14)
    # 可以本地保存为图片
    plt.savefig("示例图表.png",bbox_inches='tight') # 第二个参数设置边缘空白。
    # 展示图表
    plt.show()
    
  4. 柱形图bar()

    • 原始的简单柱形图

      import matplotlib.pyplot as plt
      import matplotlib as mpl
      # 设置图表标签
      mpl.rcParams["font.sans-serif"] = ["SimHei"]
      plt.title("班级人数图")
      plt.xlabel("班级")
      plt.ylabel("人数")
      # 绘制多个柱形,参数表:x坐标、高度、宽度、校准(默认为center)
      plt.bar(x=(1,2,3,4),height=(45,50,40,55),width=0.4,align="edge")
      plt.show()
      
    • 详细标签说明的柱形图

      import matplotlib.pyplot as plt
      import matplotlib as mpl
      # 设置图表标签
      mpl.rcParams["font.sans-serif"] = ["SimHei"]
      plt.title("专业人数图")
      plt.xlabel("专业")
      plt.ylabel("人数")
      plt.xticks((1,2,3,4),("计算机","机械","会计","日语"))
      plt.ylim(0,60)
      # 绘制多个柱形,参数表:x坐标、高度、宽度、校准(默认为center)
      rectangles = plt.bar(x=(1,2,3,4),height=(45,50,40,55),width=0.4)
      # 可以用text()为柱形添加数值标注
      for rect in rectangles:
          height = rect.get_height()
          plt.text(x=rect.get_x(),                # x坐标
                   y=height+1.5,                  # y坐标
                   s="%s" % (height),             # 标注内容
                   fontsize=15,                   # 字体大小
                   color="r",                     # 字体颜色
                   backgroundcolor="y",           # 背景颜色
                   horizontalalignment="left",    # 水平对齐
                   verticalalignment="bottom",    # 竖直对齐
                   rotation=30,                   # 旋转
                   alpha=0.4)                     # 透明度(0到1之间)
      plt.show()
      
  5. 绘制多幅子图

    • 实际上,matplotlib中调用plot()函数时,会首先调用gca()和gcf()两个函数来获取当前的坐标轴和图像,如果没有图像,则会用figure()函数创建一个,所以我们可以直接用figure()创建绘画框,再用subplot()函数创建子图。

      import matplotlib.pyplot as plt
      # 创建一个绘图框
      fig = plt.figure()
      # 在绘图框中创建两个子图p1、p2,参数表:多少行、多少列、第几幅,默认(1,1,1)
      p1 = fig.add_subplot(2,1,1)
      p2 = fig.add_subplot(2,1,2)
      # 绘制两个子图
      xset = [1,2,3,4,5,6,7,8]
      yset = [2,1,3,5,2,6,12,7]
      p1.plot(xset,yset,c='b')
      p2.scatter(xset,yset,c="r")
      plt.show()
      
  6. 绘制曲线

    import matplotlib.pyplot as plt
    import matplotlib.pylab as lab
    # 设置定义域的范围(-pi到pi)的列表,参数表:起始值,结束值,样本数(样条曲线)。
    X = lab.np.linspace(start=-lab.np.pi,stop=lab.np.pi,num=256)
    # 使用数学函数设置值域的列表
    C, S = lab.np.cos(X), lab.np.sin(X)
    # 绘制曲线
    plt.plot(X,C)
    plt.plot(X,S)
    plt.xticks((-3.14,-1.57,0,1.57,3.14),("-pi","-pi/2","0","pi/2","pi"))
    plt.show()
    

21.3 大数据分析的示例

  • 【.csv】文件是一种保存大数据的文件,Python可以调用 csv模块解析这种文件。

    import csv
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from datetime import datetime
    # 定义数据集:日期、高温、低温
    dateSet, highSet, lowSet = [],[],[]
    # 打开一个本地的.csv文件
    with open("./death_valley_2014.csv") as file:
        read = csv.reader(file)
        header = next(read)
        # 遍历每一行,并将相应数值添加到数据集。
        for row in read:
            try:
                date = datetime.strptime(row[0],"%Y-%m-%d")  # 按格式解析出日期。
                high = int(row[1])
                low = int(row[3])
            except ValueError:
                print(date, "missing message")
            else:
                dateSet.append(date)
                highSet.append(high)
                lowSet.append(low)
    # 用数据集绘制图形
    plt.plot(dateSet,highSet,c='r',alpha=0.3)
    plt.plot(dateSet,lowSet,c='b',alpha=0.3)
    plt.fill_between(dateSet,highSet,lowSet,facecolor='b',alpha=0.2)
    # 设置图表样式
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    plt.title("2014温度变化图")
    plt.xlabel("月份",fontsize=12)
    plt.ylabel("摄氏度",fontsize=12)
    plt.tick_params(axis="both",which="major",labelsize=20)
    plt.tick_params(axis="x",which="major",labelsize=12,rotation=30)
    plt.show()
    
posted @ 2021-11-01 17:14  DvLopr_Jarjack  阅读(200)  评论(0)    收藏  举报