Matplotlib

第三方库-Matplotlib

1.概念

Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像

2.安装

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

3.应用场景

数据可视化主要有以下应用场景:

  • 企业领域:利用直观多样的图表展示数据,从而为企业决策提供支持
  • 股票走势预测:通过对股票涨跌数据的分析,给股民提供更合理化的建议
  • 商超产品销售:对客户群体和所购买产品进行数据分析,促使商超制定更好的销售策略
  • 预测销量:对产品销量的影响因素进行分析,可以预测出产品的销量走势

4.常用API

4.1 绘图类型

函数名称描述
Bar绘制条形图
Barh绘制水平条形图
Boxplot绘制箱型图
Hist绘制直方图
his2d绘制2D直方图
Pie绘制饼状图
Plot在坐标轴上画线或者标记
Polar绘制极坐标图
Scatter绘制x与y的散点图
Stackplot绘制堆叠图
Stem用来绘制二维离散数据绘制(又称为火柴图)
Step绘制阶梯图
Quiver绘制一个二维按箭头

4.2 Image 函数

函数名称描述
Imread从文件中读取图像的数据并形成数组
Imsave将数组另存为图像文件
Imshow在数轴区域内显示图像

4.3 Axis 函数

函数名称描述
Axes在画布(Figure)中添加轴
Text向轴添加文本
Title设置当前轴的标题
Xlabel设置x轴标签
Xlim获取或者设置x轴区间大小
Xscale设置x轴缩放比例
Xticks获取或设置x轴刻标和相应标签
Ylabel设置y轴的标签
Ylim获取或设置y轴的区间大小
Yscale设置y轴的缩放比例
Yticks获取或设置y轴的刻标和相应标签

4.4 Figure 函数

函数名称描述
Figtext在画布上添加文本
Figure创建一个新画布
Show显示数字
Savefig保存当前画布
Close关闭画布窗口

5.pylab 模块

PyLab 是一个面向 Matplotlib 的绘图库接口,其语法和 MATLAB 十分相近。

pylab 是 matplotlib 中的一个模块,它将 matplotlib.pyplot 和 numpy 的功能组合在一起,使得你可以直接使用 numpy 的函数和 matplotlib.pyplot 的绘图功能,而不需要显式地导入 numpy 和 matplotlib.pyplot。

import matplotlib.pyplot as plt
import numpy as np

6.常用函数

6.1 plot函数(*)

pylab.plot是用于绘制二维图像的函数

语法:

pylab.plot(x, y, format_string=None, **kwargs)
x: x 轴数据,可以是一个数组或列表。
y: y 轴数据,可以是一个数组或列表。
format_string: 格式字符串,用于指定线条样式、颜色等。
**kwargs: 其他关键字参数,用于指定线条的属性。
plot 函数可以接受一个或两个数组作为参数,分别代表 x 和 y 坐标。如果你只提供一个数组,它将默认用作 y 坐标,而 x 坐标将默认为数组的索引。

格式字符串

格式字符串由颜色、标记和线条样式组成。例如:

颜色:

‘b’:蓝色 ‘g’:绿色 ‘r’:红色 ‘c’:青色 ‘m’:洋红色 ‘y’:黄色 ‘k’:黑色 ‘w’:白色

标记:

‘.’:点标记

‘,’:像素标记

‘o’:圆圈标记

‘v’:向下三角标记

‘^’:向上三角标记

‘<’:向左三角标记

‘>’:向右三角标记

‘s’:方形标记

‘p’:五边形标记

‘*’:星形标记

‘h’:六边形标记1

‘H’:六边形标记2

‘+’:加号标记

‘x’:叉号标记

‘D’:菱形标记

‘d’:细菱形标记

‘|’:竖线标记

‘_’:横线标记

线条样式:

‘-’:实线 ‘–’:虚线 ‘-.’:点划线 ‘:’:点线

示例:

import numpy as np
from matplotlib import pylab as plt

x=np.linspace(0,10,50)
y1=np.sin(x)
y2=np.cos(x)

plt.plot(x,y1,'b')
plt.plot(x,y2,'r')

plt.show()

6.2 figure函数

6.2.1 figure.add_axes()

Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域

参数

是一个包含四个元素的列表或元组,格式为 [left, bottom, width, height],其中:

left 和 bottom 是轴域左下角的坐标,范围从 0 到 1。

width 和 height 是轴域的宽度和高度,范围从 0 到 1。

示例:

import numpy as np
from matplotlib import pylab as pl

#创建一个图形对象
fig=pl.figure()

#添加一个轴域
axe1=fig.add_axes([0.1,0.1,0.8,0.8])
x=pl.linspace(1,10,50)
y=pl.cos(x)
#使用plot绘制图像
axe1.plot(x,y)

6.2.2 axes.legend()

legend 函数用于添加图例,图例会自动显示每条线或数据集的标签。

参数

  • labels 是一个字符串序列,用来指定标签的名称
  • loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示
  • handles 参数,它也是一个序列,它包含了所有线型的实例

示例:

import numpy as np
from matplotlib import pylab as pl

x=pl.linspace(1,10,50)
y=pl.cos(x)

#创建图形和轴域
fig,axe1=pl.subplots()

#绘制数据
line=axe1.plot(x,y)

#添加图例
axe1.legend(handles=line,labels=['COS函数'],loc='best')

6.3标题中文乱码

**局部处理:**适合小批量的图形绘制

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

全局处理:

首先,找到 matplotlibrc 文件的位置,可以使用以下代码:

import matplotlib
print(matplotlib.matplotlib_fname())

然后,修改 matplotlibrc 文件,找到 font.family 和 font.sans-serif 项,设置为支持中文的字体,如 SimHei。

同时,设置 axes.unicode_minus 为 False 以正常显示负号。

修改完成后,重启pyCharm。如果不能解决,尝试运行以下代码来实现:

from matplotlib.font_manager import _rebuild
_rebuild()

6.4 subplot 函数

add_subplot 是一个更灵活的函数,它是 Figure类的一个方法,用于向图形容器中添加子图。推荐使用 add_subplot,因为它提供了更好的灵活性和控制。

语法:

fig.add_subplot(nrows, ncols, index)

案例:

6.5 subplots 函数(*)

subplots 是 matplotlib.pyplot 模块中的一个函数,用于创建一个包含多个子图(subplots)的图形窗口。subplots 函数返回一个包含所有子图的数组,这使得你可以更方便地对每个子图进行操作。

语法

fig, axs = plt.subplots(nrows, ncols, figsize=(width, height))

参数

  • nrows: 子图的行数。
  • ncols: 子图的列数。
  • figsize: 图形的尺寸,以英寸为单位。

示例:

import numpy as np
from matplotlib import pylab as pl


x=pl.linspace(1,10,50)
y1=pl.sin(x)
y2=pl.cos(x)
y3=pl.tan(x)
y4=x**2

#创建图形和轴域
fig,axs=pl.subplots(1,4,figsize=(12,6))

axs[0].plot(x,y1,label='sin(x)')
axs[0].set_title('sin函数')
axs[0].set_xlabel('X轴')
axs[0].set_ylabel('Y轴')
axs[0].legend()

axs[1].plot(x,y2,label='cos(x)')
axs[1].set_title('cos函数')
axs[1].set_xlabel('X轴')
axs[1].set_ylabel('Y轴')
axs[1].legend()

axs[2].plot(x,y3,label='tan(x)')
axs[2].set_title('tan函数')
axs[2].set_xlabel('X轴')
axs[2].set_ylabel('Y轴')
axs[2].legend()

axs[3].plot(x,y4,label='x**2')
axs[3].set_title('x**2函数')
axs[3].set_xlabel('X轴')
axs[3].set_ylabel('Y轴')
axs[3].legend()


pl.show()

7.绘制图表

7.1柱状图

语法:

ax.bar(x, height, width=0.8, bottom=None, align='center', **kwargs)

参数

  • x: 柱状图的 x 轴位置。
  • height: 柱状图的高度
  • width: 柱状图的宽度,默认为 0.8。
  • bottom: 柱状图的底部位置,默认为 0,可以利用此参数来进行柱状图堆叠。
  • align: 柱状图的对齐方式,可以是 ‘center’(居中对齐)或 ‘edge’(边缘对齐)。
  • **kwargs: 其他可选参数,用于定制柱状图的外观,如 color、edgecolor、linewidth 等。

示例:

import numpy as np
from matplotlib import pyplot as plt

#柱状图

#数据部分
cate=['A_type','B_type','C_type','D_type']
values=[10,20,30,40]

#创建图形和子图
fig,ax1=plt.subplots()

#调用bar方法创建柱状图
plt.bar(cate,values,width=0.5,color='black')

plt.show()


#堆叠柱状图
import numpy as np
from matplotlib import pyplot as plt

#数据部分
cate=['A_type','B_type','C_type','D_type']
values1=[10,20,30,40]
values2=[5,10,15,20]

#创建图形和子图
fig,ax1=plt.subplots()

#调用bar方法创建柱状图
plt.bar(cate,values1,color='black')

#堆叠柱状图
plt.bar(cate,values2,bottom=values1,color='purple')

plt.show()

7.2直方图

语法

ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, **kwargs)

参数

  • x: 数据数组。
  • bins: 直方图的柱数,可以是整数或序列。
  • range: 直方图的范围,格式为 (min, max)。
  • density: 是否将直方图归一化,默认为 False。
  • weights: 每个数据点的权重。
  • cumulative: 是否绘制累积直方图,默认为 False。
  • **kwargs: 其他可选参数,用于定制直方图的外观,如 color、edgecolor、linewidth 等。

示例:

import numpy as np
from matplotlib import pyplot as plt

#数据部分,利用numpy的random方法里的正态分布随机数生成
data=np.random.randn(500)

plt.hist(data,bins=100)
plt.show()

7.3饼图

语法:

ax.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=0, **kwargs)

参数

  • x: 数据数组,表示每个扇区的占比。
  • explode: 一个数组,表示每个扇区偏离圆心的距离,默认为 None。
  • labels: 每个扇区的标签,默认为 None。
  • colors: 每个扇区的颜色,默认为 None。
  • autopct: 控制显示每个扇区的占比,可以是格式化字符串或函数,默认为 None。
  • shadow: 是否显示阴影,默认为 False。
  • startangle: 饼图的起始角度,默认为 0。
  • **kwargs: 其他可选参数,用于定制饼图的外观。

示例:

import numpy as np
from matplotlib import pyplot as plt

#数据部分
label=['鸡','羊','牛','猪']
x=[10,20,30,40]

plt.pie(x,labels=label,autopct='%1.2f%%')
plt.show()

7.4折线图

即上面的plot方法,类似sin(x),cos(x)都是折线图

示例:略

7.5散点图

语法:

ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)

参数

  • x: X 轴数据。
  • y: Y 轴数据。
  • s: 点的大小,可以是标量或数组。
  • c: 点的颜色,可以是标量、数组或颜色列表。
  • marker: 点的形状,默认为 ‘o’(圆圈)。
  • cmap: 颜色映射,用于将颜色映射到数据。
  • norm: 归一化对象,用于将数据映射到颜色映射。
  • vmin, vmax: 颜色映射的最小值和最大值。
  • alpha: 点的透明度,取值范围为 0 到 1。
  • linewidths: 点的边框宽度。
  • edgecolors: 点的边框颜色。
  • **kwargs: 其他可选参数,用于定制散点图的外观。

示例:

from matplotlib import pyplot as plt

#数据部分
x=['鸡','羊','牛','猪']
data=[[100,200,150,400],[50,120,240,200]]
y0=data[0]
y1=data[1]

plt.scatter(x,y0,label='0')
plt.scatter(x,y1,label='1')
plt.legend()

plt.show()

7.6图片获取

plt.imread 是 Matplotlib 库中的一个函数,用于读取图像文件并将其转换为 NumPy 数组,将图像加载到python中显示。

  • fname: 图像文件的路径(字符串)。
  • format: 图像格式(可选)。如果未指定,imread 会根据文件扩展名自动推断格式。

返回值

  • 返回一个 NumPy 数组,表示图像的像素数据。数组的形状取决于图像的格式:

    • 对于灰度图像,返回一个二维数组 (height, width)
    • 对于彩色图像,返回一个三维数组 (height, width, channels),其中 channels 通常是 3(RGB)或 4(RGBA)。

示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值