《数据采集与分析》期末考试Matplotlib部分重要知识点复习(详细版)
一、导入Matplotlib库
import matplotlib.pyplot as plt
如果是在Jupyter Notebook中运行时需要加上下面这条魔法命令。
%matplotlib inline
二、绘制折线图
首先我们从简单的开始,先来画一个x=(0,2Π)间sin的图像。
x = np.linspace(0, 2 * np.pi, 50) # 生成一个包含50个元素的数组,这50个元素均匀的分布在[0, 2Π]的区间上
y = np.sin(x)
plt.plot(x, y)
plt.show()
然后我们为其添加标题和坐标轴标签。
x = np.linspace(0, 2 * np.pi, 50) # 生成一个包含50个元素的数组,这50个元素均匀的分布在[0, 2Π]的区间上
y = np.sin(x)
plt.plot(x, y)
plt.title('Sin Wave')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()
我们利用marker
参数实现‘o’形式画出来:
plt.plot(x, y, marker='o')
这里我们介绍一下matplotlib库plot()
函数参数信息:
- x:要绘制的数据的x轴坐标值,可以是一个列表、元组、数组或其他可迭代对象。
- y:要绘制的数据的y轴坐标值,可以是一个列表、元组、数组或其他可迭代对象。
- fmt:指定绘图的格式字符串,通常包括颜色、标记和线型等信息。例如,'r-'表示红色实线,'bo’表示蓝色圆圈标记,'g–'表示绿色虚线等。
- label:给数据添加一个标签,用于在图例中显示。
- linewidth:指定绘制线条的宽度。
- linestyle:指定绘制线条的样式,如实线、虚线等。
- marker:指定绘制数据点的标记,如圆圈、方块等。
- markersize:指定绘制数据点的大小。
- color:指定绘制线条或数据点的颜色。
- alpha:指定绘制线条或数据点的透明度。
- markerfacecolor:指定绘制数据点的填充颜色。
- markeredgecolor:指定绘制数据点的边框颜色。
- markeredgewidth:指定绘制数据点的边框宽度。
- zorder:指定绘制的层次顺序,数值越大越靠前。
接下来我们在一个图形中分别画出sin()和cos()图像并为其设置不一样的形式:
x = np.linspace(0, 2 * np.pi, 50) # 生成一个包含50个元素的数组,这50个元素均匀的分布在[0, 2Π]的区间上
y1=np.sin(x)
y2=np.cos(x)
plt.plot(x,y1,marker='^',color='r',label="sin(x)") #默认线型是实线
plt.plot(x,y2,marker='o',color='g',linestyle='-.',label="cos(x)") #label参数和plt.legend()配合实现图例显示
plt.xlim(0,2*np.pi) #设定x轴的取值范围
plt.ylim(-1,1)
plt.xlabel("x") #设定x轴的标签
plt.ylabel("y")
plt.title("y=sin(x)/cos(x)")
plt.show()
接下来我们将设定x轴和y轴的取值范围以及设定x轴的刻度:
x=np.linspace(0,2*np.pi,13) #数据点以pi/6(30度)作为分隔间距
y1=np.sin(x)
y2=np.cos(x)
plt.plot(x,y1,marker='^',color='r',label="sin(x)") #默认线型是实线
plt.plot(x,y2,marker='o',color='g',linestyle='-.',label="cos(x)") #label参数和plt.legend()配合实现图例显示
plt.xlim(0,2*np.pi) #设定x轴的取值范围
plt.ylim(-1,1)
plt.xlabel("x") #设定x轴的标签
plt.ylabel("y")
plt.title("y=sin(x)/cos(x)")
#设定x轴的刻度,下一条语句可以注释对比一下效果,
#其中x[::3]的3表示经过3个数据点加一个标签,可以改成1看的更明显
plt.xticks(x[::3],["0",r"$\pi/2$",r"$\pi$",r"$3\pi/2$",r"$2\pi$"],color='b') #"$\pi/2$"属于Latex表示法
plt.legend()
plt.show()
这里介绍一下xticks()
函数:
其是Matplotlib库中用于设置x轴刻度的函数,其常用参数如下:
- ticks:要设置的刻度值,可以是一个列表、元组、数组或其他可迭代对象。
- labels:要设置的刻度标签,可以是一个列表、元组、数组或其他可迭代对象。
- rotation:用于指定刻度标签的旋转角度,以度为单位。
- fontsize:用于指定刻度标签的字体大小。
- color:用于指定刻度标签的颜色。
- verticalalignment:用于指定刻度标签的垂直对齐方式,可以选择’top’、‘center’或’bottom’。
- horizontalalignment:用于指定刻度标签的水平对齐方式,可以选择’left’、‘center’或’right’。
- minor:用于指定是否设置为次刻度,默认为False。
如果要显示网格:
plt.grid()
如果要设置网格样式:
plt.grid(axis='x',ls='--')
这里grid()
函数是Matplotlib库中用于添加网格线的函数,其常用参数如下:
- b:用于指定是否显示网格线,可以选择True或False,默认为True。
- which:用于指定要显示的网格线类型,可以选择’major’、‘minor’或’both’,默认为’major’。
- axis:用于指定要添加网格线的轴,可以选择’both’、‘x’或’y’,默认为’both’。
- color:用于指定网格线的颜色。
- linestyle:用于指定网格线的线型,如实线、虚线等。
- linewidth:用于指定网格线的线宽。
三、绘制饼图
绘制一个简单的饼图并为其填充颜色:
x = [2,4,6,8] #各部分的数值
labels=['a','b','c','d'] #各部分的标签
colors=['r','y','b','g'] #各部分的颜色
plt.pie(x,labels=labels,colors=colors,autopct='%1.1f%%')
plt.show()
这里pie()
函数是Matplotlib库中用于绘制饼图的函数,其常用参数如下:
- x:要绘制的数据,可以是一个列表、元组、数组或其他可迭代对象。
- explode:用于指定每个扇形之间的偏移量,可以是一个列表、元组、数组或其他可迭代对象。
- labels:用于指定每个扇形的标签,可以是一个列表、元组、数组或其他可迭代对象。
- colors:用于指定每个扇形的颜色,可以是一个列表、元组、数组或其他可迭代对象。
- autopct:用于指定扇形内显示的数据格式,例如’%.2f’表示保留两位小数。
- shadow:用于指定是否添加阴影效果,可以选择True或False。
- startangle:用于指定饼图的起始角度,以度为单位。
- counterclock:用于指定饼图的绘制方向,可以选择True(逆时针)或False(顺时针)。
- wedgeprops:用于指定每个扇形的属性,例如边框颜色、边框宽度等。
如果要突出一个部分可以设置explode
参数,然后我们还可以使用axis()
函数使饼图两个轴的单位长度相等,从而使得饼图接近圆形:
x = [2,4,6,8] #各部分的数值
labels=['a','b','c','d'] #各部分的标签
colors=['r','y','b','g'] #各部分的颜色
explode=(0,0.1,0,0) # explode用于突出显示特定的部分
plt.pie(x,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%') #autopct用于显示百分比
plt.axis("equal") # 使饼图两个轴的单位长度相等,从而使得饼图接近圆形
plt.show()
这里axis()
函数是Matplotlib库中用于设置坐标轴范围的函数,其常用参数如下:
- xmin、xmax、ymin、ymax:用于指定x轴和y轴的范围,分别对应最小值和最大值。
- xmargin、ymargin:用于指定x轴和y轴的缩放范围,可以选择一个小于1的数值。
- tight:用于指定是否将坐标轴范围设置为数据范围,默认为False。
- equal:用于指定x轴和y轴的比例是否相等,默认为False。
- aspect:用于指定x轴和y轴的纵横比例,可以选择’auto’、'equal’或一个数值。
四、绘制柱状图
我们也首先绘制一个简单的柱状图:
position=np.arange(5) #确定每个柱的垂直中线位置,相当于x轴坐标
data=[2,10,4,8,6] #确定每个柱的高度,相当于y轴坐标
plt.bar(position,data)
plt.show()
这里bar()
函数是Matplotlib库中用于绘制柱状图的函数,其常用参数如下:
- x:要绘制的每个柱的x轴坐标值,可以是一个列表、元组、数组或其他可迭代对象。
- height:要绘制的每个柱的高度,可以是一个列表、元组、数组或其他可迭代对象。
- width:用于指定每个柱的宽度,默认为0.8。
- bottom:用于指定每个柱的底部位置。
- align:用于指定每个柱的对齐方式,可以选择’center’、‘edge’或’justify’,默认为’center’。
- color:用于指定每个柱的颜色,可以是一个列表、元组、数组或其他可迭代对象。
- edgecolor:用于指定每个柱的边框颜色。
- linewidth:用于指定每个柱的边框线宽。
- tick_label:用于指定每个柱的标签,可以是一个列表、元组、数组或其他可迭代对象。
如果要绘制一个水平方向的柱状图:
position=np.arange(5) #确定每个柱的垂直中线位置,相当于x轴坐标
data=[2,10,4,8,6] #确定每个柱的高度,相当于y轴坐标
plt.barh(x,y,tick_label = data)
如果要显示数据标签:
position=np.arange(5) #确定每个柱的垂直中线位置,相当于x轴坐标
data=[2,10,4,8,6] #确定每个柱的高度,相当于y轴坐标
plt.bar(position,data)
for x, y in zip(position, data): #显示数据标签
plt.text(x, y, '{}'.format(y), ha='center', va='bottom',fontsize=11,color='r') #ha='center', va='bottom'表示水平居中,垂直底部对齐
plt.show()
这里text()
函数是Matplotlib库中用于添加文本注释的函数,其常用参数如下:
- x、y:文本注释的坐标位置。
- s:文本注释的内容。
- fontsize:用于指定文本注释的字体大小。
- color:用于指定文本注释的颜色。
- ha:用于指定文本注释的水平对齐方式,可以选择’left’、‘center’或’right’。
- va:用于指定文本注释的垂直对齐方式,可以选择’top’、‘center’或’bottom’。
- bbox:用于指定文本注释的边框样式,可以设置边框颜色、填充颜色等。
- fontweight:用于指定文本注释的字体粗细。
五、绘制散点图
绘制一个简单的服从标准正态分布的随机数红蓝散点图:
rd = np.random.RandomState(0) #设置随机数种子,保证每次运行程序生成的随机数序列相同
x1 = rd.randn(100) #生成100个服从标准正态分布的随机数
y1 = rd.randn(100)
x2 = rd.randn(100)
y2 = rd.randn(100)
plt.scatter(x1,y1,c='blue')
plt.scatter(x2,y2,c='red')
plt.show()
我们为其添加图标题和坐标轴标签、图例和网格线:
# 设置随机数种子,保证每次运行程序生成的随机数序列相同
rd = np.random.RandomState(0)
# 生成数据
x1 = rd.randn(100)
y1 = rd.randn(100)
x2 = rd.randn(100)
y2 = rd.randn(100)
# 绘制散点图
plt.scatter(x1, y1, c='blue')
plt.scatter(x2, y2, c='red')
# 添加图标题和坐标轴标签
plt.title('Scatter Plot')
plt.xlabel('X')
plt.ylabel('Y')
# 添加图例
plt.legend(['Group 1', 'Group 2'])
# 添加网格线
plt.grid(True)
plt.show()
这里scatter()
函数是Matplotlib库中用于绘制散点图的函数,其常用参数如下:
- x:要绘制的每个点的x轴坐标值,可以是一个列表、元组、数组或其他可迭代对象。
- y:要绘制的每个点的y轴坐标值,可以是一个列表、元组、数组或其他可迭代对象。
- s:用于指定每个点的大小,可以是一个标量或一个与x、y相同长度的数组。
- c:用于指定每个点的颜色,可以是一个标量或一个与x、y相同长度的数组,也可以是一个字符串(例如’r’表示红色)或一个颜色序列。
- marker:用于指定每个点的形状,可以选择不同的标记类型,例如’.'表示小圆点,‘o’表示大圆点,’+'表示十字叉等。
- alpha:用于指定每个点的透明度,可以选择一个介于0和1之间的数值。
- cmap:用于指定颜色映射,例如’viridis’、‘plasma’、'inferno’等。