第三方库-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)。
- 对于灰度图像,返回一个二维数组
示例: