Python中Matplotlib模块绘图方法总结(基础版)

简介

matplotlib是一个python 2D绘图库,利用它可以画出许多高质量的图像。只需几行代码即可生成直方图,条形图,饼图,散点图等。

Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

Matplotlib,pyplot和pylab?

Matplotlib是整个包,pyplot是Matplotlib中的一个模块,并且pylab是一个安装在一起的模块。

pylab和pyplot的区别是,前者将numpy导入了其命名空间中,这样会使pylab表现的和matlab更加相似。现在来说我们经常使用pyplot,因为pyplot相比pylab更加纯粹。

numpy,pandas?

matplotlib是可视化的表达,那么在图形的绘制中肯定会涉及一些数据处理。pandas和numpy则是python中最好用的两个数据分析库,使用它们,能够解决超过90%的数据分析问题。

Matplotlib 绘图上手

如果你还没有安装 Python 环境,那么推荐你安装 Anaconda,对于上手 Python 来说更加简单,不容易出差错。Anaconda 的安装教程网上很多,找到对应版本客户端安装即可。安装好后,即可在终端(cmd)安装核心库 Matplotlib。

1. 安装快速入门

方式一 使用 pip 安装:
pip install matplotlib
方式二 使用 conda 安装:
conda install matplotlib

或者

conda install -c conda-forge matplot

2. 绘制第一个图

下面是一个最小的示例图:

Matplotlib 绘图我看到的一般是两种方式

方式一

依靠 pyplot 隐式创建和管理图形和轴,以及 使用 pyplot 函数进行绘图
直接使用 matplotlib.pyplot.plot()函数绘图
这里在matplotlib.pyplot.plot()括号中直接输入x,y,线形,色彩,图例等信息
例如:

import matplotlib.pyplot as plt
import numpy as np
import math
 
x = np.arange(-2*math.pi, 2*math.pi, 0.001)
y = np.sin(x)
 
plt.plot(x, #x轴值
         y, #y轴值
         )
plt.show()

其中,可设置的参数有很多,除了x,y轴的信息,还可包含以下信息

  • linewidth: 线条的宽度,从0到无穷大的浮点数,例如2.5
  • color: 线条的颜色,可以是字符串、元组或RGBA值,代表不同的颜色。例如:红色’red’、绿色’green’等
  • linestyle: 线条的样式,可以是字符串,如实线’-‘、虚线’–‘、点线’:‘、破折线’-.'等
  • marker: 数据点的标记样式,如 ‘.’: 小圆点、‘o’: 实心圆、‘>’: 右三角形
  • markersize: 标记的大小,从0到无穷大的浮点数,例如7.5
  • label: 字符串类型,代表绘制的线条的标签,在图例中显示。例如Line 1
  • alpha: 线条和标记的透明度,从0到1的浮点数,表示线条和标记的透明度。例如0.5
  • zorder: 整数类型,表示绘图的层数,数值越大越靠上。例如2
    除了这些常用参数外,还有其他一些参数可以进一步定制化图形,例如:
  • solid_capstyle: 实线端点的样式,如普通平直样式"butt"、圆角样式"round"、斜角样式"projecting"等
  • dash_capstyle: 虚线端点的样式,与solid_capstyle类似 dash_joinstyle:
  • 虚线连接处的样式,如圆弧连接"round"、斜接连接"bevel"、锐角连接"miter"等 solid_joinstyle:
  • 实线连接处的样式,与dash_joinstyle类似 markevery:
  • 标记显示的间隔,可以是数字、元组或者函数,可以是数字、元组或者函数。例如:每隔一个数据点标记一个 点:markevery=2;从第二个开始,每个5个数据点标记一个点:markevery=(1, 5);根据某个函数的返回值来控制标记的位置:markevery=lambda i: i%3==0

当多个图叠加时

import matplotlib.pyplot as plt
import numpy as np
import math
 
x = np.arange(-2*math.pi, 2*math.pi, 0.001)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, #x轴值
         y1, #y轴值
         )
plt.plot(x, #x轴值
         y2, #y轴值
         )
plt.show()

在这里插入图片描述

matplotlib.pyplot.plot()括号中可设置的参数非常多,后面会有详尽版的文档供大家参考

拿上图举例,设置一下

import matplotlib.pyplot as plt
import numpy as np
import math

#设置全局字体
plt.rcParams['font.family']= 'sans-serif'
plt.rcParams['font.sans-serif'] ='Times New Roman'

x = np.arange(-2*math.pi, 2*math.pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, #x轴值
         y1, #y轴值
         linestyle='-.',  # 线型
         linewidth=3,  # 线条宽度
         color='red',  # 颜色
         label=r'$y1 = sin(x)$'  # 图例

         )
plt.plot(x, #x轴值
         y2, #y轴值
         '<',  # 散点形状
         markersize=5,  # 散点大小
         markerfacecolor='blue',  # 散点内部颜色
         markeredgecolor='gray',  # 散点边缘颜色
         label=r'$y2 = cos(x)$'  # 图例
         )
plt.title("This is Title", #设置标题
          fontsize=30,     #标题大小
          loc='center',    #标题位置
          color='purple',   #标题颜色
          fontname='DejaVu Serif' #单独设置字体类型
          ) 
plt.xlabel('x',fontsize=20,color='k') #x轴标签
plt.ylabel('y',fontsize=20,color='k') #y轴标签
plt.legend(loc='best')  #图例位置
plt.show()

在这里插入图片描述

多子图绘制

使用plt.figure()创建画布,然后使用fig.add_subplot来画出每个子图。

import matplotlib.pyplot as plt
import numpy as np
 
x = np.arange(-2*np.pi, 2* np.pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
 
# 创建画布
fig = plt.figure()
 
# 绘制第一个子图
fig1 = fig.add_subplot(2, 1, 1) 
# 这里用 211 或者 2,1,1 都可以。
# 第一个数字指定要创建具有几行子图的规格,第二个数字指列数的规格,第三个数字指对全部子图的行列从左往右,从上往下的第几个子图
fig1.grid(True)#是否绘制网格线
fig1.plot(x, #x轴值
         y1, #y轴值
         linestyle='-.',  # 线型
         linewidth=3,  # 线条宽度
         color='red',  # 颜色
         label=r'$y1 = sin(x)$'  # 图例
         )
fig1.set_title('Fig1')
 
# 绘制第二个子图


fig2 = fig.add_subplot(2, 1, 2)
fig2.grid(False)
fig2.plot(x, #x轴值
         y2, #y轴值
         '<',  # 散点形状
         markersize=5,  # 散点大小
         markerfacecolor='blue',  # 散点内部颜色
         markeredgecolor='gray',  # 散点边缘颜色
         label=r'$y2 = cos(x)$'  # 图例
         )
fig2.set_title('Fig2')
 
plt.show()# 显示图像

在这里插入图片描述

方式二

显式创建图形和轴,并对其调用方法( “面向对象 (OO) 样式”)。
使用 plt.subplot() 函数用于直接制定划分方式和位置进行绘图
这种一般适合画组图,比如3乘2的组图

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

在这里插入图片描述
组图形式

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 200) 
y1 = np.sin(x)
y2 = np.cos(x)

fig, (ax1,ax2) = plt.subplots(1,2,figsize=(10, 5)) #一行两列的图,图的大小为行为10,列为5
ax1.plot(x, y1)
ax2.plot(x, y2)
plt.show()

在这里插入图片描述

复杂详尽一点的例子

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2 * np.pi, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig, (ax1,ax2) = plt.subplots(1,2,figsize=(10, 5))
ax1.plot(x, y1, label=r'$y1 = sin(x)$',linewidth=3,linestyle='-.') # 图例
ax1.plot(x, y2, label=r'$y1 = cos(x)$',linewidth=3,linestyle='-') # 图例
ax1.set_xlabel('x label') 
ax1.set_ylabel('y label')  
ax1.set_title("Simple Plot Sin(x)") 
ax1.legend(loc='best')#图例位置

ax2.plot(x, y2, '*' ,label=r'$y2 = cos(x)$')
ax2.set_title("Simple Plot Cos(x)")  
ax2.set_xlabel('x label') 
ax2.set_ylabel('y label') 
ax2.legend(loc='best')#图例位置
plt.show()

在这里插入图片描述
Matplotlib的文档和示例同时使用OO和pyplot 风格。通常,我们建议使用 OO 样式,特别是对于 复杂的绘图,以及旨在重用的函数和脚本 作为更大项目的一部分。但是,pyplot样式可以非常方便 用于快速交互式工作。

3. 图片的保存

使用plt.savefig来保存图像

plt.savefig('xx.png', dpi=300)

plt.savefig()的第一个参数是fname,也就是要保存图片的路径,在路径里输入什么后缀,图片就会自动存成什么后缀,比如这里就保存成了png格式;dpi为分辨率,分辨率越高,图片越清晰。

4. 更多

以上图片来自matplotlib官网,它向我们展示了matplotlib的图的构成元素。

大多数元素都比较好理解:

坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)…

在这里插入图片描述

写在最后

本文粗浅的描述了Matplotlib绘图的方法以及各个参数信息
更多内容可参考Matplotlib官网说明
后续将针对上述两种绘图方式出详尽版的文档
具体统计各个参数所包含的内容,敬请期待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值