万剑归宗:Matplotlib,绘图如此简单

在这里插入图片描述

模块介绍

Matplotlib是一个Python 绘图库/工具包,可以生成各种2D、3D图形,让绘图成为简单容易的事情,使用matplotlib只需几行简单的代码就可以生成线形图、直方图、功率谱、条形图、误差图、散点图3D等。Matplotlib可以跨平台,可用于Python脚本,Python和IPython shell,Jupyter Notebook等。

Numpy是使用python进行科学计算的基础包,如N维数组,线性代数,随机数等功能。Matplotlib通常和numpy模块配合使用,将数据进行图形化展示。

使用基础

Matplotlib安装

在这里插入图片描述

Windows 系统安装 Matplotlib
进入到 cmd 窗口下,执行以下命令:
python -m pip install -U pip setuptools
python -m pip install matplotlib

在这里插入图片描述

Linux系统安装 Matplotlib
使用Linux包管理器进行安装:
sudo apt-get install python-matplotlib
在线安装:
Pip install matplotlib
IDE中直接安装

在这里插入图片描述

Mac系统安装 Matplotlib
使用pip命令进行安装:
sudo python –m pip install matplotlib

在这里插入图片描述

检查是否安装成功:
Pip list | grep matplotlib

创建画布介绍

使用figure()方法,设置画布长宽:

matplotlib.pyplot.figure(),常用参数:
 num=None,
 figsize=None,
 dpi=None,
 facecolor=None,
 edgecolor=None,
 frameon=True,
 clear=False常用参数:分别为画布的宽(单位像素), 高, 背景颜色。

参数详解:

  1. Num:可选参数,可以将该num理解为窗口的属性id,即该窗口的身份标识。如果不提供该参数,则创建窗口的时候该参数会自增,如果提供的话则该窗口会以该num为Id存在。
  2. figsize:可选参数。整数元组(长值,宽值),画布长宽,默认是无。
  3. dpi:可选参数,整数。表示该窗口的分辨率。
  4. facecolor:可选参数,表示窗口的背景颜色。
  5. edgecolor:可选参数,表示窗口的边框颜色。
  6. frameon:可选参数,表示是否绘制窗口的图框,默认是
  7. clear:可选参数,默认是false,如果提供参数为ture,并且该窗口存在的话 则该窗口内容会被清除。

方法及属性

名称说明
Figure()方法可以理解为获得一张画布,创建画布对象
Axes()方法画布中的坐标轴对象,一个画布可以存在多个坐标轴
Text对象代表文本对象
Gcf()方法获得当前绘图的figure对象. Gca=get current figure
Gca()方法获得当前绘图的axes对象. Gca=get current axes
Plot(x,y,color,marker,edgecolor)生成线形图,各种参数
Add_subplot(x,y,z)方法在Figure对象上创建新的Axes对象,Figure可以包含多个Axes对象,这里的参数含义是,添加一个
axes.set_title属性设置图形的标题;
axes.set_xticks属性设置X轴的刻度,其中minor=True参数表示设置更小的刻度;
axes.set_yticks属性设置Y轴的刻度
axes.set_xlabel属性设置X轴的标签;
axes.set_ylabel属性设置X轴的标签;
axes.grid属性开启图形的刻度网格,其中minor=True参数表示显示小刻度的网格;
axes.text属性为图形添加文字,前两个参数表示添加的文字在坐标系中的位置;

案例:线型图

在这里插入图片描述

import matplotlib.pyplot as plt #别名
import numpy as np #别名

fig1 = plt.figure() #创建画布对象
ax1 = fig1.add_subplot(1, 1, 1) #创建1行1列第一个axes对象

#randn函数返回一个或一组样本,具有标准正态分布。
#dn表格每个维度
#返回值为指定维度的array

x = np.random.randn(5) # 标准正太分布,生成随机数据
y = np.random.randn(5) #生成随机数据
#使用数据生成折线图
ax1.plot(x, y) #生成线性图
fig1.show() #显示图片

在这里插入图片描述

import matplotlib.pyplot as plt #别名
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig1 = plt.figure()
# ax1 = fig1.add_subplot(1, 1, 1)
ax1 = fig1.gca(projection="3d")
ax1.set_xlim([-1,1])
'''
randn函数返回一个或一组样本,。
dn表格每个维度
返回值为指定维度的array

'''
ax2 = fig1.add_subplot(2, 2, 1)
x = np.random.randn(5)
# [ 1.58042522  0.5129409  -0.67737106 -0.27264997  1.4350527 ]
y = np.random.randn(5)
ax1.plot(x,y,c='r')
ax1.scatter(x,y,c='r')
ax2.plot(x, y)
fig1.show()

案例:直方图

在这里插入图片描述

import matplotlib.pyplot as plt #别名

import numpy as np #别名


fig = plt.figure() #创建画布
plt.xlim([-150,150])
ax2 = fig.add_subplot(1, 1, 1) #创建唯一的axes对象

# np.random.seed(2)
data = np.random.normal(0,30,1000)#正太分布的拟合
bins = np.arange(-100, 100, 5)#从-100到100,步长为5,生成序列,左闭右开
ax2.hist(data, bins=bins)#使用hist函数,生成柱形图
fig.show()#显示画布中的图像

案例:散点图

在这里插入图片描述

import matplotlib.pyplot as plt #别名

import numpy as np #别名
  

# 创建伪随机数的生成器
rng = np.random.RandomState(0)

# 生成100个[0,1]之间均匀分布的随机数,
# [0.5488135 , 0.71518937, 0.60276338, 0.54488318,......]
x = rng.randn(100)
y = rng.randn(100)
colors = rng.randn(100)
sizes = rng.randn(100)*1000
plt.scatter(x,y,alpha=0.6,c=colors,s=sizes)

# 显示颜色条
plt.colorbar()
plt.show()

'''
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
x = np.arange(1,101)
y = 20+3*x+np.random.normal(0,60,100)
# marker='o','.',',','x','+','v','^','<','>','s','d'
ax.scatter(x,y,marker="<",c="k",alpha=0.5,s=100)
fig.show()
'''

案例:圆形图

在这里插入图片描述

import matplotlib.pyplot as plt #别名
import numpy as np

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(1,1,1)
ax.spines['left'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.set_xticks([])
ax.set_yticks([])
# 实现功能 pi = 3.141592653589793
theta = np.arange(0,2* np.pi +0.1,2* np.pi /800)
x = np.cos(theta)
y = np.sin(theta)
v = np.linspace(0,10,80)
v.shape = (80,1)
x = v * x
y = v * y
plt.style.use('ggplot')
plt.plot(x, y,color = (0.75,0,0))
plt.show()

案例:3D图

在这里插入图片描述

步骤:

  1. 创建画布,axes对象
  2. 通过各种计算/函数获得数据
  3. 数据加工/参数设置
  4. 设置axes对象属性
  5. 输出/展示
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter

fig = plt.figure(figsize=(16,12))
ax = fig.gca(projection="3d")

# 准备数据
x = np.arange(-5, 5, 0.25)    #生成[-5,5]间隔/步长0.25的数列,间隔越小,曲面越平滑
y = np.arange(-5, 5, 0.25)
#格点矩阵,原来的x行向量向下复制len(y)次,形成len(y)*len(x)的矩阵,即为新的x矩阵;
# 原来的y列向量向右复制len(x)次,形成len(y)*len(x)的矩阵,即为新的y矩阵;新的x矩阵和新的y矩阵shape相同
x, y = np.meshgrid(x,y)
r = np.sqrt(x ** 2 + y ** 2)
z = np.sin(r)

surf = ax.plot_surface(x, y, z, cmap=cm.nipy_spectral)  # cmap指 色表

# 自定义z轴
ax.set_zlim(-1, 1)
ax.zaxis.set_major_locator(LinearLocator(20))  # z轴网格线的疏密,刻度的疏密,20表示刻度的个数
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))  # 将z的value字符串转为float,保留2位小数

#设置坐标轴的label和标题
ax.set_xlabel('x',size=30)
ax.set_ylabel('y',size=30)
ax.set_zlabel('z',size=30)
ax.set_title("Surface plot", weight='bold', size=40)

#显示右侧的色卡条
fig.colorbar(surf, shrink=0.6, aspect=15)  # shrink表示整体收缩比例,aspect仅对bar的宽度有影响,aspect值越大,bar越窄
plt.show()

总结

Matplotlib图形组成结构:

在这里插入图片描述

使用matplotlib绘图流程:

1、创建绘图对象figure
2、创建画图区域或子图figure2(axes对象)
3、定义具体数据
4、数据处理(标题,坐标,网格等个性化显示)
5、使用数据绘图
6、输出/使用对象

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值