python数据分析工具之 matplotlib详解


Posted in Python onApril 09, 2020

不论是数据挖掘还是数学建模,都免不了数据可视化的问题。对于 Python 来说,matplotlib 是最著名的绘图库,它主要用于二维绘图,当然也可以进行简单的三维绘图。它不但提供了一整套和 Matlab 相似但更为丰富的命令,让我们可以非常快捷地用 python 可视化数据。

matplotlib基础

# 安装
pip install matplotlib

两种绘图风格

MATLAB风格:

基本函数是 plot,分别取 x,y 的值,然后取到坐标(x,y)后,对不同的连续点进行连线。

面向对象:

创建一个图形 fig 和一个坐标 ax 。

  • fig:figure(plt.Figure) 是一个能容纳各种坐标轴,图形,文字和标签的容器。
  • ax:axes(plt.Axes) 是一个带有刻度和标签的矩形,最终会包含各种可视化元素。

示例:

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

# 创建fig和ax
fig = plt.figure()
ax = plt.axes()

x = np.linspace(0,10,100)
# 显示sin函数图形
plt.plot(x, np.sin(x))
# 显示cos函数图形
plt.plot(x, np.cos(x))

plt.show()

python数据分析工具之 matplotlib详解

这就是利用面向对象的方式绘图,在交互模式中可以看到,每画一个图就是产生一个对象,最后再显示出来。

python数据分析工具之 matplotlib详解

绘图样式

python数据分析工具之 matplotlib详解

# 调整坐标轴上下限
plt.xlim([xmin, xmax])
plt.ylim([ymin, ymax])

plt.axis([xmin, xmax, ymin, ymax])
# 参数:tight:把图形设置成紧凑模式,不留多余的部分
# equal:图形显示分辨率为1:1

线形图

文字设置

图形标题:plt.title

坐标轴标题:plt.xlabel, plt.ylabel

基础图例:plt.legend

注意:对中文不友好,需要额外方法,尽量使用英文

# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)
plt.plot(x, np.sin(x))
plt.title('sin-function')
plt.xlabel('x-value')
plt.ylabel('y-label')
plt.show()

python数据分析工具之 matplotlib详解

图例

通过legend可以设置图例,同时通过参数的调整可以细腻的设置图例的位置、形式等。参数主要包括:

  • loc:图例的位置
  • frameon:是否带边框
  • framealpha:颜色透明
  • shadow:阴影
# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)

fig, ax = plt.subplots()

ax.plot(x, np.sin(x), color='red', label='sin-function')
ax.plot(x, np.cos(x), color='blue', label='cos-function')

ax.legend(loc='upper right', frameon=True, shadow=True, framealpha=0.2)
# 设置图例位置为右上,有边框,有阴影,且透明度为0.2

plt.show()

python数据分析工具之 matplotlib详解

颜色条

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)
I = np.sin(x) * np.cos(x[:,np.newaxis])

plt.imshow(I)
plt.colorbar()
plt.show()

python数据分析工具之 matplotlib详解

散点图

散点图基础

散点图主要以点为主,数据是不连续的数据,通过设置线的型号来完成。型号包括‘o'、‘+'、‘*'、‘1'、‘h'、‘D'等等,具体使用探索一下就好,用不到太多。

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0, 10, 30)
y = np.sin(x)

# 通过设置线型为点来完成散点图的绘制
plt.plot(x, y, 'o', color='blue')
plt.show()

python数据分析工具之 matplotlib详解

如果设置线型为点线结合,那么将绘制出连续的线,对应点处为所设置的点型。

画散点图还可以使用scatter函数来画,他有很多更细节的描述,用法与plot类似,对于数据量较大的可视化时,plot的效率更高一些。

误差线

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0, 10, 30)
dy = x * 0.5
y = np.sin(x) + dy

plt.errorbar(x, y, yerr=dy, fmt='.k', ecolor='blue')
plt.show()

python数据分析工具之 matplotlib详解

连续误差线表示的是连续量,可以使用 plt.plot 和 plt.fill_between 来画出。

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0, 10, 30)
ysin = np.sin(x)
ycos = np.cos(x)

plt.plot(x, ysin, color='red')
plt.plot(x, ycos, color='blue')

plt.fill_between(x, ysin, ycos, color='gray', alpha=0.2)
plt.show()

python数据分析工具之 matplotlib详解

等高线(密度)

  • plt.contour   等高线
  • plt.contourf  自带填充颜色
  • plt.imshow   显示图形

等高线绘制方法:z = f(x,y),z表示高度。当只有一个颜色绘图时,虚线表示负值,实线表示正值。meshgrid 可以将一维数据变成二维网格数据。

import matplotlib.pyplot as plt
import numpy as np

def f(x, y):
 return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

# 得到网格点矩阵
x, y =np.meshgrid(x, y)

# 计算z轴的值
z = f(x, y)

# 绘制图形
plt.contour(x, y, z, colors='green')
# plt.contour(x, y, z, 50, cmap='RdGy') # 更改配色,值50等分,红灰配色
plt.show()

python数据分析工具之 matplotlib详解

python数据分析工具之 matplotlib详解

plt.contourf(x, y, z, 50, cmap='RdGy') # 改为contourf,自动填充颜色,则变为连续的

python数据分析工具之 matplotlib详解

直方图

基本画法:plt.hist 可以直接画直方图,参数主要包括:

  • bins:划分段(柱数)
  • color:颜色
  • alpha:透明度
  • histtype:图类型
import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(1000)
plt.hist(data, bins=30, alpha=0.3, histtype='stepfilled', color='blue', edgecolor='none')
plt.show()

python数据分析工具之 matplotlib详解

程序中 random.randn random.rand 相比,randn表示随机生成的数符合正态分布,因此画出图来是如上图所示。

子图

plt.subplot(2,1,1) # 子图,(2,1,1)代表,创建2*1的画布,并且定位于画布1 ;等效于plt.subplot(211),即去掉逗号
# subplots 可以同时创建多个子图
figure,ax = plt.subplots(2, 3) 
# 这是一个灵活创建子图的方法,可以创建任意组合的图形,不必一一对齐,以下为示例:
grid = plt.GridSpec(2, 3, wspace=0.3, hspace=0.2)
plt.subplot(grid[,:2])
plt.subplot(grid[1,1:3])

python数据分析工具之 matplotlib详解

图例配置

文字注释

通过不同的坐标变换,可以把文字放在不同的位置:

  • ax.transData:以数据为基准
  • ax.transAxes:以轴为基准
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.axis = ([0, 1, 0, 1])

ax.text(0.5, 0.5, "Data:(0.5, 0.5)", transform=ax.transData)
ax.text(0.5, 0.1, "Axes:(0.5, 0.1)", transform=ax.transAxes)
plt.show()

python数据分析工具之 matplotlib详解

箭头注释

  • plt.arrow:产生SVG向量图形式的箭头,会随着分辨率改变而改变,不推荐
  • plt.annotate:可以创建文字和箭头
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(0, 20, 1000)
ax.plot(x, np.cos(x))
ax.axis('equal')

ax.annotate("max", xy=(6.28, 1), xytext=(10, 4), arrowprops=dict(facecolor='black', shrink=0.05))
ax.annotate('min', xy=(5 * np.pi, -1), xytext=(2, -6), arrowprops=dict(arrowstyle="->", connectionstyle='angle3, angleA=0, angleB=-90'))
plt.show()

python数据分析工具之 matplotlib详解

python数据分析工具之 matplotlib详解

三维图

基础三维图

matplotlib 中绘制三维图用到 mplot3d 包。导入 mplot3d 包后,可以利用 projection 参数,控制绘制三维图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

plt.show()

python数据分析工具之 matplotlib详解

三维图中当然包含三个轴,x,y,z。画线 ax.plot3D,画点 ax.scatter3D。为了三维效果,它会自动将远处的点颜色变浅。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

z = np.linspace(0, 15, 100)
x = np.sin(z)
y = np.cos(z)

ax.plot3D(x, y, z, 'red')
ax.scatter3D(x, y, z, 'blue')
plt.show()

三维等高线

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

def f(x, y):
 return np.sin(np.sqrt(x ** 2 + y ** 2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y =np.meshgrid(x, y)
Z = f(X, Y)

ax.contour3D(X, Y, Z, 50)
plt.show()

python数据分析工具之 matplotlib详解

图形绘制出来后,可以通过 ax.view_init 来控制观察的角度,便于理解。

  • 俯仰角度:x-y 平面的旋转角度
  • 方位角度:沿着 z 轴顺时针旋转角度

pandas绘图

上篇文章讲述了 pandas 的基本用法,pandas 是数据分析中最重要的工具之一,这里补充一下 pandas 绘图。

Series绘图

# 这是一个小栗子
s1 = Series(np.random.randint(1000).cumsum()) # 创建series,cumsum()是指叠加求和,本位数是前几项之和
s1.plot() # series有自己的plot函数,里面可以写入想要的参数

DataFrame绘图

df = DataFrame(
 np.random.randint(1,10,40).reshape(10,4),
 columns=['A','B','C','D']
 )
df.plot()
# dataframe也有自己的plot,按列画出来,参数包含ax,选择输出的画布
# 参数:stacked=True,表示一个堆叠的情况,同一个index下,columns一不同颜色叠在一起

总结

到此这篇关于python数据分析工具之 matplotlib详解的文章就介绍到这了,更多相关python数据分析 matplotlib内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Django框架中settings文件的部署建议
May 30 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
基于python OpenCV实现动态人脸检测
May 25 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
python简单区块链模拟详解
Jul 03 Python
python 直接赋值和copy的区别详解
Aug 07 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Python logging设置和logger解析
Aug 28 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
使用python检查yaml配置文件是否符合要求
Apr 09 #Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 #Python
python实现简单学生信息管理系统
Apr 09 #Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 #Python
pycharm的python_stubs问题
Apr 08 #Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 #Python
解决pycharm下pyuic工具使用的问题
Apr 08 #Python
You might like
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
JavaScript面向对象编程
2008/03/02 Javascript
offsetParent 算法分析
2010/04/05 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
JavaScript创建表格的方法
2020/04/13 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
一文总结学习Python的14张思维导图
2017/10/17 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
聊聊python中的异常嵌套
2020/09/01 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
为什么需要版本控制?
2013/08/08 面试题
WSDL的操作类型主要有几种
2013/07/19 面试题
学校食堂标语
2014/10/06 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书