数据可视化工具matplotlib
- 什么是matplotlib
- matplotlib架构
- matplotlib画图演示
- matplotlib散点图、直方图、柱状图
- 总结
一、什么是matplotlib
- 专用于开发绘制 2D 图表(也包括 3D)
- 使用起来比较简单
- 以渐进、交互方式实现数据可视化
- 安装方式:Anaconda、pip
二、matplotlib架构
matplotlib整体架构是由以下三层组成的,各层之间单向通信,即每层只与下一层通信。
- Scripting 脚本
- Artist 美工
- Backend 后端
当然也可以将上面三层看作两层,上面两层是前端(提供API接口供用户调用,将服务请求传回后端),最底下一层是后端。
1. backend 层
matplotlib API位于该层,这些 API 用于在底层实现图像元素的一个个类
- FigureCanvas对象实现了绘图区域这一概念
- Renderer 对象在 FigureCanvas 上面绘图
2. Artist 层
图像中所有能看到的元素都属于 Artist 对象,其包括:标题、轴标签、刻度等组成图形的所有元素,这些都是Artist对象的实例
- Figure : 可理解为画板
- Axes : 坐标系,每个Axes对象只属于一个Figure对象,由两个Axis(坐标轴)组成。还包含曲线
- Axis : 坐标轴,用于定义数值范围
3. Scripting 层
主要用于数据分析和可视化
- pyplot
- 操作或者改动Figure对象,例如创建Figure对象
- 大部分工作是出路样本文件的图像和坐标的形成
三、Matplotlib基本要点
1. 折线图
- 准备数据
- 导入对应的包
- Matplotlib.pyplot模块中的plot()绘制折线图、show()用于显示该图
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
%matplotlib inline
# 准备数据
x = ['monday','tuesday','wednesday','thursday','friday','saturaday','sunday']
y = [300, 500, 100, 600, 800, 1000, 1200]
plt.plot(x, y) # x, y 是对应的x,y轴
# plt.show() #加上show不会展示对象的地址
[<matplotlib.lines.Line2D at 0x28997dda4f0>]
plt.plot(x, y, 'r--') # 颜色改变,--相当于显示虚线
plt.show()
plt.plot(x, y, 'r.') # 所以第三个参数的含义就是颜色、曲线类型
plt.show()
plt.plot(x, y, 'g-.') # 所以第三个参数的含义就是颜色、曲线类型
plt.show()
plt.plot(x, y, 'bo') # 比.大一点
plt.show()
plt.plot(x, y, 'b-o') # -o使用直线连起来
plt.show()
小结
- 颜色:b、g、r、o、k(黑色)
- 样式:.、 -. 、 o 、 -o 、--、o--、o-.
2. 更多元素
-
figsize=(宽,高)设置图片大小
plt.figure(figsize=(20,8))
-
savefig :保存到本地, (注释掉plt.show())
plt.savefig('./1.png)
-
xlabel, ylabel, title x轴, y轴的描述以及图表标题
plt.xlabel(), plt.ylabel(), plt.title()
-
xticks, yticks调整x或者y轴的刻度
plt.xticks(),plt.yticks()
-
Iw,线条的样式(比如颜色,透明度等)
plt.plot(Iw=20)
-
标记出特殊的点(比如告诉别人最高点和最低点在哪里)
plt.text(x1, y1, str, verticalalignment, horizontalalignment)
① figsize=(宽,高)设置图片大小
**plt.figure(figsize=(20,8))**
plt.figure(figsize = (20, 8))
plt.plot(x, y, 'ko-.')
plt.show()
②savefig :保存到本地, (注释掉plt.show())
**plt.savefig('./1.png)**
注意,使用show函数后,在对图像进行保存的话会失败
plt.plot(x, y, 'ko-.')
plt.show()
plt.savefig('1.png') # 1.png为空白文件
<Figure size 432x288 with 0 Axes>
plt.plot(x, y, 'ko-.')
plt.savefig('1.png')
plt.show()
③xlabel, ylabel, title x轴, y轴的描述以及图表标题
**plt.xlabel(), plt.ylabel(), plt.title()**
plt.xlabel('Testxlabel') # 对 x 轴数据进行说明
plt.ylabel('Testylabel',color = 'blue') # 对 y 轴数据进行说明,color 传入颜色
plt.title('Testtitle',fontsize = 22) # 对 图表标题 进行说明,传入关键字参数 fontsize 各异自定义字体大小
plt.plot(x, y)
plt.show()
④xticks, yticks调整x或者y轴的刻度
**plt.xticks(),plt.yticks()**
x_rescale = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
y_rescale = [20, 40, 60, 80, 100, 120, 140]
plt.plot(x, y, 'ro-') # 应该先渲染再替换
plt.xticks(x, x_rescale)# 起到了替换作用,替换前后的列表长度一定要一致
plt.yticks(y, y_rescale)
plt.show()
⑤Iw,线条的样式(比如颜色,透明度等)
**plt.plot(Iw=20)**
plt.plot(x, y, lw = 20)
plt.show()
⑥标记出特殊的点(比如告诉别人最高点和最低点在哪里)
**plt.text(x1, y1, str, verticalalignment, horizontalalignment)**
后面两个参数只有两个可能的取值:top/bottom、right/left
对应的效果就是以对应点为基准设置文本框的对齐方式
plt.plot(x, y) # 同样也是先渲染
plt.text(x[2],y[2],'TestMark',verticalalignment = 'top') # 这里只能传入字母
plt.show()
⑦中文字符的解决办法
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 放在导包下面
plt.plot(x, y)
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.show()
⑧添加图例
用于指示各图线的标识,必须和label连用
plt.plot(x, y, label = '日收入') # label 用于给 legend 读取并显示
plt.legend(loc = 1) # 可以传入 loc 参数 来定义 legend 的 位置
plt.show()
⑨添加子画布
- fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(20, 8). dpi=80)
- 指定有两个axes,共用20, 8的fig,返回fg对象和ax对象;其中fig对象就相当于一块白纸,返回的元组才是具体的坐标轴、曲线等
ax1_x = [1, 2, 3, 4, 5, 6, 7]
ax1_y = [7, 6, 5, 4, 3, 2, 1]
ax2_x = [ 2, 3, 4, 5, 6, 7, 8]
ax2_y = [ 6, 5, 4, 3, 2, 1, 0]
_,(ax1, ax2) = plt.subplots(nrows = 1, ncols = 2, figsize = (20, 8), dpi = 100)
ax1.plot(ax1_x, ax1_y, lw = 22)
ax2.plot(ax2_x, ax2_y)
plt.show()
3. 总结
- 给制了折线图plt.plot()
- 设置了图片的大小plt.figure( figsize=None )
- 实现了图片的保存plt.savofig()
- 设置了xy轴上的刻度和字符串plt.xticks()
- 设置了xy轴的标题plt.xlabel()
- 设置了字体font.manager.fontProporties,matplotib.rc
- 增加子画布, 分开显示图像plt.subplots()
- 为不同的图形添加图例plt.legend()
plt.bar(x, y)
plt.show()