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 判断自定义对象类型
Mar 21 Python
Python中文竖排显示的方法
Jul 28 Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
关于反爬虫的一些简单总结
Dec 13 Python
python中的set实现不重复的排序原理
Jan 24 Python
python实现转圈打印矩阵
Mar 02 Python
Python语言进阶知识点总结
May 28 Python
Python 实现交换矩阵的行示例
Jun 26 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
python访问hdfs的操作
Jun 06 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php 时间计算问题小结
2009/01/04 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
ECMAScript 创建自己的js类库
2012/11/22 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
详解Eslint 配置及规则说明
2018/09/10 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python与php实现分割文件代码
2017/03/06 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python3中的bytes和str类型详解
2019/05/02 Python
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
清洁工表扬信
2014/01/08 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
如何使用python包中的sched事件调度器
2022/04/30 Python
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript