Python数据分析与展示——Matplotlib绘制折线图

1.Matplotlib介绍

Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发。

matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式。示例:

import matplotlib.pyplot as plt
# 包含五个元素列表的一个图形
#如果输入的参数只是一个一维的列表,那么这个数组会被当成y轴处理,x轴是列表的索引
plt.plot([1,5,8,2,5])
plt.ylabel("grade")  #y轴增加标签
plt.savefig('te01',dpi=600)  #dpi是指每个英寸包含600个像素点(质量挺高的了)
plt.show()

2.图像结构和三层结构

  • 图像结构

Python数据分析与展示——Matplotlib绘制折线图_第1张图片

 

  • 三层结构

    • 图像层

      • 正式绘图(直方图、折线图、散点图、饼状图)

    • 辅助显示层

      • 用户可以设置添加标题、网格、图例等对图形的描述信息

    • 容器层主要由 Canvas、Figure、Axes 组成。

      • Canvas 是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布 (Figure) 的工具。

      • Figure 是 Canvas 上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。

      • Axes 是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。

      • 特点:

        • 一个figure (画布)可以包含多个 axes (坐标系/绘图区), 但是一个axes 只能属于一个 figure。

        • 一个 axes (坐标系/绘图区)可以包含多个 axis (坐标轴), 包含两个即为2d坐标系,3个即为3d坐标系

    • 容器层

3.折线图

1.折线图的绘制与显示

plot() 用于画图它可以绘制点和线,语法格式如下:

# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

参数说明:

  • x:X轴数据,列表或数组,可选(绘制多条曲线时,各条曲线的x不能省略)

  • y:Y轴数据,列表或数组

  • format_string:控制曲线的格式字符串(由颜色字符、风格字符和标记字符组成),可选

    颜色字符
    颜色字符 说明 颜色字符 说明
    'b' 蓝色 'm' 洋红色 magenta
    'g' 绿色 'y' 黄色
    'r' 红色 'k' 黑色
    'c' 青绿色 cyan 'w' 白色
    '#008000' RGB某颜色(十六进制色彩) '0.8' 灰度值字符串
    风格字符
    风格字符 说明 风格字符 说明
    '-' 实线 ':' 虚线
    '--' 破折线 '' ' ' 无线条
    '-.' 点划线
    标记字符
    标记字符 说明 标记字符 说明
    '.' 点标记 's' 实心方形标记
    ',' 像素标记(极小点) 'p' 实心五角标记
    'o' 实心圈标记 '*' 星形标记
    'v' 倒三角标记 'h' 竖六边形标记
    '^' 上三角标记 'H' 横六边形标记
    '>' 右三角标记 '+' 十字标记
    '<' 左三角标记 'x' x标记
    '1' 下花三角标记 'D' 菱形标记
    '2' 上花三角标记 'd' 瘦菱形标记
    '3' 左花三角标记 '|' 垂直线标记
    '4' 右花三角标记
  • **kwargs:第二组或更多(x, y, format_string)

    • color:控制颜色,color='green'

    • linestyle:线条风格,linestyle='dashed'

    • marker:标记风格,marker='o'

    • markerfacecolor:标记颜色,markerfacecolor='blue'

    • marksize,标记尺寸,markerfacecolor=20

#1.创建画布
plt.figure()
#2.绘制图像
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
#3.显示图像
plt.show()

2.设置画布属性与图片保存

plt.figure(figsize=(),dpi=)

figsize:指定图的长宽

dpi:图像的清晰度

plt.savefig(path)

#1.创建画布
plt.figure(figsize=(20,8),dpi=80)
#2.绘制图像
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
plt.save("test.png")

plt.show()会释放资源,如果在显示图像之后保存图片将只能保存空图片

3.修改x、y轴刻度

  • plt.xticks(x, **kwargs)

    x:要显示的刻度值

  • plt.yticks(y,**kwargs)

    y:要显示的刻度值

#1.准备数据
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
#2.创建画布
plt.figure(figsize=(20,8),dpi=80)
#3.绘制图像
plt.plot(x,y_shanghai)
#修改xy刻度
#准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
#label与x一一对应
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))
#4.显示图像
plt.show()

中文显示问题

原因:字体本身就不支持中文

解决:

  • 安装字体

    • 双击安装simhei.ttf 下载地址:Download SimHei Font - Thousands of fonts to download for free

  • 删除matplotlib缓存文件

  • 配置文件

4.添加网格显示

  • plt.grid(True,linestyle='--',alpha=0.5)

一般的 ture 显示默认,为是否添加网格,linestyle 为线条风格,显示为虚线。Alpha 为透明度。

5.添加描述信息

添加 x 轴,y 轴描述信息及标题。

  • plt.xlabel("时间")

  • plt.ylabel("温度")

  • plt.title("标题" )

函数 说明
plt.xlabel() 对X轴增加文本标签
plt.ylabel() 对Y轴增加文本标签
plt.title() 对图形整体增加文本标签
plt.text() 在任意位置增加文本
plt.annotate() 在图形中增加带箭头的注解

6.多个折线和显示图例

  • 多个折线

    • import random
      import matplotlib.pyplot as plt
      from matplotlib import font_manager
      my_font = font_manager.FontProperties(fname='msyh.ttc')  # 拷贝过来的字体文件
      x = range(60)
      y_beijing = [random.uniform(15,18) for i in x]
      y_shanghai = [random.uniform(15,18) for i in x]
      #2.创建画布
      plt.figure(figsize=(20,8),dpi=80)
      #3.绘制多个折线
      plt.plot(x,y_shanghai,color='r')
      plt.plot(x,y_beijing,color='b')
      #修改xy刻度
      #准备x的刻度说明
      x_label = ["11点{}分".format(i) for i in x]
      #label与x一一对应
      plt.xticks(x[::5],x_label[::5],fontproperties=my_font)
      plt.yticks(range(0,40,5))
      #4.显示图像
      plt.show()
  • 显示图例

    plt.legend()

    plt. legend(Loc="best")
    #Location String:'best'、'upper right'、'upper left'、'lower left'、'lower right' 等等
    #Location Code:0、1、2、3、4
    #如果想在左下角显示,具体操作如下:
    # 显示图例
    plt.legend(loc=“lower left”)
    #图例出现在左下角。
    #用数字代替也可以。
    # 显示图例
    plt.legend(loc=4)

7.创建多个绘图区

  • plt.subplots(nrows=1, ncols=1, **fig_kw)创建一个带有多个 axes(坐标系/绘图区)的图,返回一个画布figure和绘图区axes。

    figure,axes = plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
    #axes[0]为第一个绘图区  以此类推
  • nrows:默认为 1,设置图表的行数。

  • ncols:默认为 1,设置图表的列数。

  • sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 'none'、'all'、'row' 或 'col'。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 'all':所有子图共享 x 轴或 y 轴,'row' 设置每个子图行共享一个 x 轴或 y 轴,'col':设置每个子图列共享一个 x 轴或 y 轴。

  • squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N1 或 1N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。

  • subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。

  • gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。

  • **fig_kw:把详细的关键字参数传给 figure() 函数。

​​​​​

面向对象的方法:axes.set_方法名()

  • eg:

    • set_ xticks

    • set_ yticks

    • set_ xlabel

    • set_ ylabel

  • import random
    import matplotlib.pyplot as plt
    from matplotlib import font_manager
    my_font = font_manager.FontProperties(fname='msyh.ttc')  # 拷贝过来的字体文件
    x = range(60)
    y_beijing = [random.uniform(15,18) for i in x]
    y_shanghai = [random.uniform(15,18) for i in x]
    #2.创建画布
    # plt.figure(figsize=(20,8),dpi=80)
    #创建多个子图
    figure,axes = plt.subplots(nrows=1, ncols=2,figsize=(20,8),dpi=80)
    #3.绘制图像
    axes[0].plot(x,y_shanghai)
    axes[1].plot(x,y_beijing)
    ​
    #修改xy刻度
    #准备x的刻度说明
    x_label = ["11点{}分".format(i) for i in x]
    #label与x一一对应
    axes[0].set_xticks(x[::5])
    axes[0].set_xticklabels(x_label[::5],fontproperties=my_font)
    axes[0].set_yticks(range(0,40,5))
    axes[1].set_xticks(x[::5])
    axes[1].set_xticklabels(x_label[::5],fontproperties=my_font)
    axes[1].set_yticks(range(0,40,5))
    #4.显示图像
    plt.show()

你可能感兴趣的:(python,数据分析,开发语言)