matplotlib 做基于python的一款可视化神器,类似于 ggplot2
,它基本能涵盖常见的一些图形。同时得益于强大的python社区支持,这个包的功能也在不断增加。有时候写多了python,再写R,一时半会还想不起代码咋写。同时python中用于统计的包也比较全面,自己对python了解的还是多一些,准备在数据可视化方面用matplotlib
。
matplotlib支持一些常见的图形例如:
- 线图;
- 散点图;
- 等高线图;
- 条形图;
- 柱状图;
- 3D 图形,
- 甚至是图形动画等等.
学习视频教程: 莫烦的
https://morvanzhou.github.io/tutorials/data-manipulation/plt/1-1-why/
话不多说,先上几张漂亮的图片,压压场
安装
- 使用
pip
安装
1 | python -m pip install -U pip |
1 | #pip install matplotlib --user |
1 | fig, ax = plt.subplots() # Create a figure containing a single axes. |
[<matplotlib.lines.Line2D at 0x7f34ca8c95e0>]
plt.subplots()
函数返回两个对象
- fig 图形对象
- ax 坐标轴对象
当然如果不需要操作坐标轴的话,也可以直接使用plot
函数1
2plt.plot([2,3,5,6],[2,4,5,6])
plt.plot([2,3,5,6],[2,4,5,6]) #直接使用plot函数
更加深入的理解图片的构造
1 | figure=plt.figure() ##没有坐标轴的空白图片,啥也看不到 |
1 | fig,axs=plt.subplots(2,2) ##2x2的四坐标轴图片 |
Axes对象
- 通常Axes就是包含data的一个图片
- 一张figure可以有多个Axes
- 而一个Axes只属于某一个figure
- Axes包含有两个或者3个Axis(坐标轴)
- Axes类似于ggplot分面中的一个分面
对坐标轴中显示数据范围的控制
1 | axes.Axes.set_xlim() ##控制X轴显示范围 |
控制坐标轴标签与图形标签
1 | axes.Axes.set_title() ##图片标签 |
控制图例名称和显示图例
1 | axes.plot(data,label="图例名") |
1 | import matplotlib |
Axis对象
- 用于设置坐标轴范围
- 控制坐标轴上显示的标记,
Locator
对象 - 控制坐标轴上显示的字符
Formatter
对象
Artist
基本上所有的figure都会用到Artist对象,并且Artist是与Axes对象绑定在一起使用的。Artist对象就包含以下几个对象
- Text
- Line2D
- collection
- Patch
输入数据格式
所有的绘图数据都是基于numpy.array
类型进行的,当然有些类似array的数据类型,例如pandas
中的dataFrame,numpy
中的matrix;这些数据类型作为输入数据时,可能不能够正常的工作,所有还是将它们转换成numpy.array
之后再绘制图片吧
将panda 数据框转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import numpy as np
import pandas
a=pandas.DataFrame(np.random.rand(4,5), columns = list('abcde')) ##获取4x5的随机数据框
print(a)
a b c d e
0 0.505938 0.742418 0.732312 0.008823 0.559201
1 0.834437 0.657429 0.136503 0.654495 0.841873
2 0.725788 0.746307 0.240214 0.732954 0.119796
3 0.452142 0.172521 0.103506 0.472862 0.744575
a_array=a.values
print(a) ##看起来没变化,实质上一个是数据框,一个是数组
a b c d e
0 0.505938 0.742418 0.732312 0.008823 0.559201
1 0.834437 0.657429 0.136503 0.654495 0.841873
2 0.725788 0.746307 0.240214 0.732954 0.119796
3 0.452142 0.172521 0.103506 0.472862 0.744575将numpy.matrix转换
1
2
3
4
5
6
7
8
9import numpy as np
b = np.matrix([[1, 2], [3, 4]])
print(b)
[[1 2]
[3 4]]
b_asarray = np.asarray(b)
print(b)
[[1 2]
[3 4]]
pyplot两种绘图方式
1 | import matplotlib.pyplot as plt |
1 | import matplotlib.pyplot as plt |
还有第三种,之后遇到在看吧
如何导出图片
文档里用了一个词BacKends
,意思就是针对不同的需求,导出不同类型的图片
配置
一般来说不用配置,能够根据系统自动检测,
linux中配置一下环境变量即可
1 | $ export MPLBACKEND=qt5agg |
在脚本内部配置
1 | import matplotlib |