在matplotlib中存在两套画图命令:
- 基于面向对象的方式OO
- 基于pyplot函数接口的方式
作者还是推荐我们使用
object-oriented interface的方式绘制图形
以后绘图中涉及到的一些常见操作,我会用锚点标注好;以后查具体代码的时候也会非常的快
绘图数据
准备绘图数据,包含了几个人的收入信息吧;准备绘制一个柱状图
| 1 | import numpy as np | 
创建实例对象
采用面向对象的接口,生成figure.Figure和axes.Axes实例对象
- figure.Figure相当于画布的作用,在上面可以绘制多个图片
- axes.Axes就是一副完整的图片,多个图片可以绘制在一块画布上
| 1 | fig, ax = plt.subplots() ##生成实例对象 | 

| 1 | fig,ax=plt.subplots() | 

控制图片样式
这里相当于ggplot2里的theme,可以使用print(plt.style.available)查看系统自带的样式;使用plt.style.use('样式名')使用对应的样式;如下图所示,选择好样式后,就在图中添加了网格线,改变了柱子的颜色
| 1 | plt.style.use('fivethirtyeight') | 

旋转x轴label
当坐标轴上的label太长的时候,两个刻度之间可能会发生重叠。因此可以通过旋转label的方法调整label的显示。
首先的获取坐标轴上的label对象,使用pyplot.setp()函数设置对应的属性
| 1 | fig,ax=plt.subplots() | 

给图片添加label
除了修改刻度线上的label,同样可以给图片的坐标轴label,图片的label,以及坐标轴显示范围。
所有的操作都是采用面向对象接口
- xlim参数修改坐标轴显示范围
- xlabel 修改坐标轴label
- title 修改图片label
| 1 | fig, ax = plt.subplots() | 

批量修改坐标轴刻度label
通过定义一个函数来处理传进来的每个label,传递的函数需要使用tick对象进行实例化
报错 https://stackoverflow.com/questions/25119193/matplotlib-pyplot-axes-formatter
| 1 | ## 定义处理函数 | 

组合多个axes
直接操作ax对象,再使用对应的作图函数生成对应的图片
| 1 | fig,ax =plt.subplots(figsize=(8,8)) | 

保存图片
调用figure对象的savefig方法保存图片;在保存图片之前可以查看支持保存的图片格式
- transparent图片背景是否透明
- dpi图片清晰度
- format保存格式
- bbox_inches="tight"图片与画布紧密排布
| 1 | print(fig.canvas.get_supported_filetypes()) ## 查看支持保存格式 | 
#支持的类型
{'ps': 'Postscript', 'eps': 'Encapsulated Postscript', 'pdf': 'Portable Document Format', 'pgf': 'PGF code for LaTeX', 'png': 'Portable Network Graphics', 'raw': 'Raw RGBA bitmap', 'rgba': 'Raw RGBA bitmap', 'svg': 'Scalable Vector Graphics', 'svgz': 'Scalable Vector Graphics', 'jpg': 'Joint Photographic Experts Group', 'jpeg': 'Joint Photographic Experts Group', 'tif': 'Tagged Image File Format', 'tiff': 'Tagged Image File Format'}
 
      