python数据分析工具 | matplotlib
不论是数据挖掘还是数学建模,都免不了数据可视化的问题。对于 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()
这就是利用面向对象的方式绘图,在交互模式中可以看到,每画一个图就是产生一个对象,最后再显示出来。
绘图样式
# 调整坐标轴上下限
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()
图例
通过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()
颜色条
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()
散点图
散点图基础
散点图主要以点为主,数据是不连续的数据,通过设置线的型号来完成。型号包括‘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()
如果设置线型为点线结合,那么将绘制出连续的线,对应点处为所设置的点型。
画散点图还可以使用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()
连续误差线表示的是连续量,可以使用 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()
等高线(密度)
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()
plt.contourf(x, y, z, 50, cmap='RdGy') # 改为contourf,自动填充颜色,则变为连续的
直方图
基本画法: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()
程序中 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])
图例配置
文字注释
通过不同的坐标变换,可以把文字放在不同的位置:
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()
箭头注释
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()
三维图
基础三维图
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()
三维图中当然包含三个轴,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()
图形绘制出来后,可以通过 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数据分析工具:Pandas之Series
Python数据分析工具:Pandas之Series Pandas概述Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建.Pandas纳入大量库和标准数据模型,提供高效的操作数 ...
- python数据分析工具安装集合
用python做数据分析离不开几个好的轮子(或称为科学棧/第三方包等),比如matplotlib,numpy, scipy, pandas, scikit-learn, gensim等,这些包的功能强 ...
- python绘图工具matplotlib在linux下安装和使用
工具介绍:matplotlib 是Python编程语言的一个绘图库及其数值数学扩展 NumPy.它为利用通用的图形用户界面工具包, 如Tkinter, wxPython, Qt或GTK+向应用程序嵌入 ...
- Python数据分析--工具安装及Numpy介绍(1)
Anaconda 是一个跨平台的版本,通过命令行来管理安装包.进行大规模数据处理.预测分析和科学计算.它包括近 200 个工具包,大数据处理需要用到的常见包有 NumPy . SciPy . pand ...
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
- 高效使用 Python 可视化工具 Matplotlib
Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时面临的一些挑战,为什么要使用Matplo ...
- Python 可视化工具 Matplotlib
英文出处:Chris Moffitt. Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时 ...
- python数据分析工具——Pandas、StatsModels、Scikit-Learn
Pandas Pandas是 Python下最强大的数据分析和探索工具.它包含高级的数据结构和精巧的工具,使得在 Python中处理数据非常快速和简单. Pandas构建在 Numpy之上,它使得以 ...
- python数据分析工具 | pandas
pandas是python下强大的数据分析和探索工具,是的python在处理数据时非常快速.简单.它是构建在numpy之上的,包含丰富的数据处理函数,支持时间序列分析功能,支持灵活处理缺失数据. pa ...
随机推荐
- SpringBoot入门系列(五)Thymeleaf的常用标签和用法
前面介绍了Spring Boot 中的整合Thymeleaf .不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/16577 ...
- flask blueprint出现的坑
from flask import Blueprint admin = Blueprint('admin',__name__) def init_bule(app): app.register_blu ...
- [Python] iupdatable包:File模块使用介绍
一.简介 文件模块主要是对常见的文件读写功能进行了封装,默认使用UTF8(utf_8_sig)格式编码,实现一行代码读写文件. 二.简单示例 安装 iupdatable 包 pip install - ...
- .NET实现一个简单的IOC容器
目录 1.主要细节 2.具体示例 参考及示例代码下载 shanzm-2020年3月17日 20:06:01 1.主要细节 使用反射程序集的方式获取对象的类型 通过反射的方式获取指定类型的的所有公共属性 ...
- 微信小程序修改request合法域名不生效及解决方法
在小程序微信公众平台修改后请求,依然在console中显示修改前的域名. 解决:在小程序开发者工具中点击“详情”后点击“域名信息”,就会自动刷新
- XiaoQi.Study 项目(三)
一.配置跨域 1.首先注册跨域要求 ,(可访问的IP.端口) //注册跨域 services.AddCors(options => { options.AddPolicy("XiaoQ ...
- 微信小程序开发(一)开发准备
微信小程序开发(一)开发准备 微信小程序,近几年,越来越火,应用场景越来越多,好大学习起来,比较容易,学习曲线平缓,你要是会前端开发,那简直可以用易如反掌来形容. 小程序,开发工具官方也提供了,他兼容 ...
- STM32时钟配置方法
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...
- 源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)
要实现限流.熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息.例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑 ...
- Fiddler4 手机抓包
1.要对计算机Fiddler进行配置,允许远程计算机连接. 2.保证手机电脑在同一局域网中. 3.手机上设置代理服务器.以华为手机为例,设置-->WLAN-->找到并长按目前所连接的WiF ...