目录
(一)常见的图形
1、趋势图(直线图):plot()
2、散点图:scatter():
(二)统计图形
1、柱状图:bar(
2、条形图:barh()
3、直方图:hist()
4、饼图:pie()
5、级线图:polar()
6、气泡图(散点图):scatter()
7、树状图(棉棒图):stem()
8、箱线图:boxplot()
9、误差棒图:errorbar()
(三)图形样式
1、设置刻度样式
2、增加指示注解与无指示注解
3、标题与坐标轴的投影效果
4、转移坐标轴
5、划分窗口:subplot()
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100) # 生成0~10之间的100个数
y = np.sin(x) # 计算纵坐标
plt.plot(x, y) # 绘制折线图
plt.title('Sin函数图像') # 添加标题
plt.xlabel('x轴') # 添加x轴标签
plt.ylabel('y轴') # 添加y轴标签
#plt.xlim(-2,2) #设定 x 坐标轴的显示范围在[-2,2]
#plt.axhline(y=0) #添加水平参考线
#plt.grid() #绘制网格线
#plt.axhline(y=0) #绘制y=0的刻度线
#plt.axvspan(-4,2,facecolor='gray', alpha=0.3) #添加在-4到2的垂直方向的颜色区域,填充颜色为灰色,透明度为 0.3
plt.show() # 显示图形
pyplot 参数:
x
:x轴数据,一般是一个数组或列表。
y
:y轴数据,一般是一个数组或列表。
label
:标签,用于说明数据的名称或含义。xlabel用于x轴,y
label用于y轴
color或c
:颜色,默认是蓝色,也可以是RGB值或颜色名称。
marker
:点标记,用于显示每个数据点的形状。
linestyle或ls
:线条类型,用于控制线条的样式、粗细等。
linewidth或lw
:线条宽度,用于控制线条的宽度。
alpha
:透明度,用于控制线条或点标记的透明度。
xlim
和ylim
:x轴和y轴的范围,用于设定坐标轴的刻度范围。
title
:标题,用于给整个图形添加标题。gird:绘制刻度线网格线
axhline:绘制平行于x轴的水平参数线
axvspan:绘制垂直于 x轴的水平参数区域
annotate:添加图形内容细节的指向型注释
text:添加图形内容细节的无指向型注释
legend:用于在图像中添加自定义的图例
结果:
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 设置数据
x = np.random.rand(50)
y = np.random.rand(50)
# 绘制散点图
plt.scatter(x, y, s=50, c='b', marker='o', alpha=0.5)
# 添加标题和坐标轴标签
plt.title('散点图')
plt.xlabel('x轴')
plt.ylabel('y轴')
# 显示图像
plt.show()
参数解释:
x
:散点图 x 轴的数据;y
:散点图 y 轴的数据;s
:散点的尺寸,即标记的大小;c
:散点的颜色;marker
:散点的形状,默认是圆形;alpha
:透明度,取值范围为 0~1,值越小透明度越高。
结果:
bar(x, height, width=0.8, bottom=None, align='center', data=None, **kwargs)
x
:柱形图的 x 坐标数据;height
:柱形图的高度,对应于每个 x 坐标数据的高度;width
:柱形的宽度,默认为 0.8;bottom
:柱形的底部位置,默认为 None,表示将底部设定为绘图平面的 y 轴;align
:柱形的对齐方式,可以是'center'
、'edge'
等;data
:数据源对象,可以是多种数据类型,例如 DataFrame、Series、数组等;kwargs
:其他可选参数,包括柱形颜色、边框颜色、标签位置等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = ['A', 'B', 'C', 'D', 'E']
y = np.random.randint(0, 10, size=(len(x)))
# 绘制柱状图
plt.bar(x, y, width=0.6, bottom=None, align='center', alpha=0.8)
# 添加标签
for i, v in enumerate(y):
plt.text(i, v+0.2, str(v), ha='center', fontsize=10)
# 显示图形
plt.show()
barh(y, width, height=0.8, left=None, align='center', data=None, **kwargs)
y
:柱形条的 y 坐标数据;width
:柱形条的宽度,对应于每个 y 坐标数据的宽度;height
:柱形条的高度,默认为 0.8;left
:柱形的左侧位置,默认为 None,表示将左侧设定为绘图平面的 x 轴;align
:柱形的对齐方式,可以是'center'
、'edge'
等;data
:数据源对象,可以是多种数据类型,例如 DataFrame、Series、数组等;kwargs
:其他可选参数,包括柱形颜色、边框颜色、标签位置等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
y = ['A', 'B', 'C', 'D', 'E']
x = np.random.randint(0, 10, size=(len(y)))
# 绘制水平柱状图
plt.barh(y, x, height=0.6, left=None, align='center', alpha=0.8)
# 添加标签
for i, v in enumerate(x):
plt.text(v+0.2, i, str(v), va='center', fontsize=10)
# 显示图形
plt.show()
hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, **kwargs)
x
:需要绘制直方图的数据;bins
:用于指定每个直方的宽度,可以是单个整数、序列或者字符串。默认为 10,表示将数据范围等分成 10 份;range
:需要绘制直方图的数据范围;density
:是否将直方图归一化,其值默认为 False;weights
:用于构成直方图的权重数组;cumulative
:是否需要绘制累积频率图,默认为 False;bottom
:堆叠图的底部高度;histtype
:指定直方图类型,可以是'bar'
、'barstacked'
、'step'
、'stepfilled'
等;align
:直方图的对齐方式;orientation
:直方图的绘制方式,可以是'horizontal'
或者'vertical'
;rwidth
:直方图的相对宽度,值为 1 的时候没有空隙,值为 0.5 的时候间距等于直方图宽度的一半;log
:是否对 y 轴进行对数变换;color
:直方图的颜色;label
:直方图的标签;stacked
:是否采用堆叠方式绘制直方图,默认为 False;normed
:已被弃用,可以使用density
参数替代;kwargs
:其他可选参数,包括直方图边框、填充、颜色等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(2022)
data = np.random.randn(10000)
# 绘制直方图
plt.hist(data, bins=40, range=(-4, 4), density=False, alpha=0.8, color='blue')
plt.xlabel('x')
plt.ylabel('频率')
plt.title('直方图')
# bins 设为 40,表示将数据范围等分成 40 份;
# range 设为 (-4, 4),表示数据范围在[-4,4]之间
# density 设为 False,表示不需要将直方图归一化;
# alpha 设为 0.8,表示直方图颜色透明度为 0.8;
# color 设为 'blue',表示直方图颜色为蓝色;
# 显示图像
plt.show()
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, **kwargs)
x
:用于绘制饼图的数据,可以是数组、列表、元组等可迭代对象;explode
:用于指定每个饼图之间的偏移量;labels
:用于指定每个饼图对应的标签;colors
:用于指定每个饼图对应的颜色;autopct
:用于指定每个饼图占比的格式字符串;pctdistance
:用于指定占比标签距离圆心的距离;shadow
:是否需要添加阴影效果,默认为 False;labeldistance
:指定每个饼图标签与圆心的距离的倍数;startangle
:指定饼图开始绘制的角度,默认为 0;radius
:指定饼图的半径;counterclock
:指定饼图绘制的方向,默认为 True,即逆时针方向绘制;wedgeprops
:用于指定饼图环的属性,例如 linewidth、edgecolor 等;textprops
:用于指定占比标签的属性,例如 fontsize、color 等;center
:指定饼图的中心位置坐标;frame
:是否需要绘制边框,默认为 False;rotatelabels
:是否需要对饼图标签进行旋转,默认为 False;kwargs
:其他可选参数,包括绘图风格、字体、字号等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(2022)
data = np.random.randn(10000)
import matplotlib.pyplot as plt
# 生成数据
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 45, 10, 5]
colors = ['red', 'blue', 'green', 'orange', 'gray']
explode = [0.1, 0, 0, 0, 0]
# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal')
plt.show()
polar(theta, r, **kwargs)
theta
:用于绘制极坐标图的角度数据,单位为弧度;r
:用于绘制极坐标图的大小数据,表示一组与角度对应的大小数据,与theta
相对应;kwargs
:其他可选参数,包括极坐标的填充、颜色等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机数据
theta = np.linspace(0, 2*np.pi, 1000)
r = np.random.rand(1000)
# 绘制极坐标图
plt.polar(theta, r)
plt.show()
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
x
:散点图的 x 坐标;y
:散点图的 y 坐标;s
:散点的大小(面积),可以是常数、数组、列表或者元组;c
:散点的颜色,可以是常数、数组、列表或者元组;marker
:散点的标记符号;cmap
:用于指定散点颜色的 colormap;norm
:用于指定 colormap 的归一化方法;vmin
:用于指定 colormap 的最小值;vmax
:用于指定 colormap 的最大值;alpha
:散点的透明度;linewidths
:用于指定散点边缘线宽度;edgecolors
:用于指定散点边缘线颜色,默认为'face'
,表示使用散点颜色;plotnonfinite
:是否需要绘制非有限数值,默认为 False;data
:数据源对象,可以是多种数据类型,例如 DataFrame、Series、数组等;kwargs
:其他可选参数,包括散点颜色、边缘线颜色、标签位置等相关设置
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
np.random.seed(2022)
x = np.random.randn(50)
y = np.random.randn(50)
colors = np.random.randint(0, 10, 50)
# 绘制散点图
plt.scatter(x, y, s=20*abs(x+y)+100, c=colors, cmap='viridis', alpha=0.8)
# 添加红色边缘线
plt.scatter(x, y, s=20*abs(x+y)+100, facecolors='none', edgecolors='red', linewidths=1)
# 添加标题和坐标轴标签
plt.title('气泡图')
plt.xlabel('X')
plt.ylabel('Y')
# 显示图像
plt.show()
stem(x, y, linefmt=None, markerfmt=None, basefmt=None, bottom=None, label=None, use_line_collection=None, data=None, **kwargs)
x
:树状图的 x 坐标;y
:树状图的 y 坐标;linefmt
:用于指定树状图线段的格式字符串;markerfmt
:用于指定树状图标记的格式字符串;basefmt
:用于指定树状图基线的格式字符串;bottom
:使用堆叠样式绘制树状图时的基线高度;label
:树状图的标签;use_line_collection
:是否使用LineCollection
来绘制线段,默认为 True;data
:数据源对象,可以是多种数据类型,例如 DataFrame、Series、数组等;kwargs
:其他可选参数,包括线段样式、标记样式、标签位置等相关设置。
# 生成数据
np.random.seed(2022)
x = np.linspace(0.0, 2.0*np.pi, 100)
y = np.sin(x)
x = np.arange(0, 10, 1)
y = np.random.rand(10)
# 绘制离散波形图
plt.stem(x, y)
plt.show()
boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None, data=None)
x
:箱线图的数据,可以是数组、列表、DataFrame 等;notch
:是否绘制缺口,默认为False
,表示绘制箱线图而非半个月牙形的齿状图;sym
:用于指定离群点的标记符号,默认为None
;vert
:是否绘制竖向的箱线图,默认为True
;whis
:用于指定箱线图的上下位置(须)的长度,默认为1.5
;positions
:用于指定箱线图的位置,默认为[1, 2, ..., n]
,其中n
为数据列数量;widths
:用于指定箱线图的宽度;patch_artist
:是否允许填充箱线图,主要用于自定义颜色和样式,默认为False
;bootstrap
:用于指定计算置信区间的样本数;usermedians
:手动指定中位数值;conf_intervals
:用于指定计算置信区间方法和置信水平,默认为None
;meanline
:是否绘制均值线,默认为False
;showmeans
:是否显示均值值,默认为False
,通常不建议显示;showcaps
:是否显示箱线图末端的whisker
线段,默认为True
;showbox
:是否显示箱线图框体,默认为True
;showfliers
:是否显示离群点,默认为True
;boxprops
:用于指定箱线图框体的属性,例如 linewidth、edgecolor 等;labels
:用于指定箱线图的标签;flierprops
:用于指定离群点的属性,例如 markersize、markerfacecolor 等;medianprops
:用于指定中位数线的属性,例如 linewidth、color 等;meanprops
:用于指定均值线的属性,例如 linewidth、linestyle、color 等;capprops
:用于指定箱线图whisker
线段末端的帽子的属性,例如 linewidth、linestyle、color 等;whiskerprops
:用于指定箱线图whisker
线段的属性,例如 linewidth、linestyle、color 等;manage_xticks
:是否需要自动管理 x 轴刻度,默认为True
;autorange
:是否自动调整坐标轴范围,默认为False
;zorder
:用于指定图层顺序,通常不需要设置;data
:数据源对象,可以是多种数据类型,例如 DataFrame、Series、数组等。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机数据
data = np.random.randn(100, 5)
# 绘制箱线图
plt.boxplot(data)
plt.show()
errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, label='', **kwargs)
x
:误差棒图的 x 坐标;y
:误差棒图的 y 坐标;yerr
:用于指定误差范围的垂直线段长度,可以使数字、标量或者数组;xerr
:用于指定误差范围的水平线段长度,可以使数字、标量或者数组;fmt
:用于指定点的颜色、线型和标记符号的格式;ecolor
:用于指定误差线段和帽子的颜色;elinewidth
:用于指定误差线段的线宽;capsize
:用于指定误差帽子的大小;barsabove
:是否将误差棒图绘制在数据点之上;lolims
:是否绘制小于数据点的下限误差;uplims
:是否绘制大于数据点的上限误差;xlolims
:是否绘制小于数据点的水平下限误差;xuplims
:是否绘制大于数据点的水平上限误差;errorevery
:用于指定错误条目的抽样间隔;capthick
:用于指定误差帽子的线宽;label
:标注名称;kwargs
:其他可选参数,包括误差帽子哪里停止等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
#生成数据
x = np.arange(0, 10, 1)
y = np.random.rand(10)
yerr = np.random.rand(10) * 0.2
# 绘制带误差线的散点图
plt.errorbar(x, y, yerr=yerr, fmt='o')
plt.show()
设置刻度样式需要两个方法:xticks与yticks:
xticks(ticks=None, labels=None, **kwargs) yticks(ticks=None, labels=None, **kwargs)
ticks
:用于设置刻度位置的序列或者数组;labels
:用于设置刻度标签的序列或者数组;kwargs
:其他可选参数,例如字体、字号、旋转角度等。
常用场景
设置刻度标签字体大小
import matplotlib.pyplot as plt # 创建图形,并设置 x 轴、y 轴刻度标签字体大小为 14 fig, ax = plt.subplots() ax.tick_params(axis='both', labelsize=14)
设置刻度间隔和范围
import numpy as np import matplotlib.pyplot as plt # 创建图形并绘制曲线 x = np.linspace(0, 10, 100) y = np.sin(x) fig, ax = plt.subplots() ax.plot(x, y) # 设置 x 轴刻度范围为 0 到 10,刻度间隔为 2 ax.set_xticks(np.arange(0, 11, 2))
自定义刻度标签
import numpy as np import matplotlib.pyplot as plt # 创建图形并绘制曲线 x = np.linspace(0, 10, 100) y = np.sin(x) fig, ax = plt.subplots() ax.plot(x, y) # 自定义 y 轴刻度标签 ax.set_yticks([-1, 0, 1]) ax.set_yticklabels(['Low', 'Medium', 'High'])
隐藏刻度
import numpy as np import matplotlib.pyplot as plt # 创建图形并绘制曲线 x = np.linspace(0, 10, 100) y = np.sin(x) fig, ax = plt.subplots() ax.plot(x, y) # 隐藏 y 轴刻度 ax.tick_params(axis='y', which='both', length=0)
添加指示注解:
annotate(text, xy, xytext=None, arrowprops=None, **kwargs)
text
:注释文本内容;xy
:注释目标坐标,表示箭头所在位置;xytext
:注释文本的位置,如果未指定则默认为xy
参数;arrowprops
:箭头的属性,可以指定箭头的长度、宽度、颜色等;kwargs
:其他一些可选参数,包括文本颜色、字体、字号等。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 1, 100)
y = np.sin(x*10)
# 绘制 sin(x) 的图像
plt.plot(x, y)
# 添加注释:最大值处对应的 x 坐标和 y 坐标
max_y = np.max(y)
max_idx = np.argmax(y)
plt.annotate(f'Max={max_y:.2f}', xy=(x[max_idx], max_y),
xytext=(x[max_idx]-0.2, max_y+0.3),
arrowprops=dict(arrowstyle='->', lw=2))
# 显示图形
plt.show()
添加无指示注解
text(x, y, s, fontdict=None, withdash=False, **kwargs)
x
和y
:文本框的位置,可以是图像坐标、数据坐标或者坐标轴分数坐标等;s
:文本标签内容;fontdict
:字体属性参数,支持字体、字号、颜色等相关设置;withdash
:文本边框属性,可以设置是否使用虚线边框;kwargs
:其他可选参数,包括纵横比、文本排列、旋转角度、对齐方式等相关设置。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(-5, 5, 100)
y = np.sin(x)
# 绘制 sin(x) 的图像
plt.plot(x, y)
# 添加文本标签:最大值处对应的 x 坐标和 y 坐标
max_y = np.max(y)
max_idx = np.argmax(y)
plt.text(x[max_idx], max_y, f'Max={max_y:.2f}', fontsize=12,
color='red', ha='center', va='bottom')
# 显示图形
plt.show()
设置投影效果需要用到set_path_effects()
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patheffects as pe
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.plot(x, y)
ax.set_title('sin(x)')
# 设置标题阴影效果
title_text_obj = ax.set_title('Title', fontsize=18, fontweight='bold')
title_text_obj.set_path_effects([pe.withStroke(linewidth=2, foreground='gray')])
# 设置坐标轴标签阴影效果
x_label_obj = ax.set_xlabel('X Label', fontsize=16)
y_label_obj = ax.set_ylabel('Y Label', fontsize=16)
x_label_obj.set_path_effects([pe.withStroke(linewidth=1, foreground='gray')])
y_label_obj.set_path_effects([pe.withStroke(linewidth=1, foreground='gray')])
plt.show()
转移坐标轴需要用到set_zorder方法
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('sin(x)')
# 将 x 轴和 y 轴的刻度放到图形的顶部和右侧
ax.xaxis.tick_top()
ax.yaxis.tick_right()
# 设置标题和坐标轴的深度值
ax.title.set_zorder(1)
ax.xaxis.label.set_zorder(1)
ax.yaxis.label.set_zorder(1)
ax.xaxis.set_tick_params(pad=10, zorder=1)
ax.yaxis.set_tick_params(pad=10, zorder=1)
# 设置坐标轴投影线条的样式和深度值
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['top'].set_linestyle('-')
ax.spines['right'].set_linestyle('-')
ax.spines['top'].set_zorder(0)
ax.spines['right'].set_zorder(0)
plt.show()
subplot(nrows, ncols, index, **kwargs)
nrows
:子图表格的行数;ncols
:子图表格的列数;index
:子图在表格中的位置(从左到右、从上到下的编号);kwargs
:其他可选参数,例如坐标轴刻度、标题、标签字体等。
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei,Times New Roman, Arial'#设置字体格式,显示中文、正负号,罗马数字
import matplotlib.pyplot as plt
import numpy as np
#生成数据
np.random.seed(2022)
x = np.linspace(0.0, 4.0*np.pi, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 绘制正弦函数
plt.subplot(2, 1, 1)
plt.plot(x, y_sin, 'g-', linewidth=2, label='sin(x)')
plt.legend(loc='upper right')
plt.title('Sin(x)与Cos(x)')
# 绘制余弦函数
plt.subplot(2, 1, 2)
plt.plot(x, y_cos, 'r-', linewidth=2, label='cos(x)')
plt.legend(loc='lower right')
plt.xlabel('X')
# 显示图像
plt.show()