Matplotlib基础

目录

1.中文乱码

局部处理

全局处理

2.Figure函数

plt.figtext()

plt.figure()

plt.show()

plt.savefig()

plt.close()

plt.tight_layout()

fig.add_subplot(rows, cols, index)

plt.add_subplots(cow,col,figsize=(height,width))

fig.add_axes([left, bottom, width, height] )

3.Axes函数

ax.legend()

ax.text()

在折线图上添加文本

在散点图上添加文本

在柱状图上添加文本

ax.set_title()、ax.set_xlabel()和ax.set_ylabel()

ax.set_xlim([min,max])和ax.set_ylim([min,max])

ax.set_xscale(str)和ax.set_yscale(str)

ax.set_xticks()和ax.set_yticks()、ax.get_xticks()和ax.get_yticks()

ax.twinx() 和 ax.twiny()

ax.grid(b=None, which='major', axis='both', **kwargs)

ax = plt.subplot2grid(shape, loc, rowspan=1, colspan=1)

4.格式字符串

颜色

标记

线条样式

5.绘图API

柱状图(Bar Chart)

堆叠柱状图

分组柱状图

水平条形图(Barh)

箱型图(boxplot)

直方图(Histogram)

2D直方图(Histogram2D)

饼图(Pie Chart)

折线图(plot)

极坐标图(polar chart)

散点图(Scatter Plot)

堆叠图(Stackplot)

火柴图(Stem)

阶梯图(Step)

二维箭头图(Quiver)

轮廓图(等高线 Meshgrid)


1.中文乱码

局部处理

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

全局处理

(1)查找matplotlibrc的地址:

import matplotlib
print(matplotlib.matplotlib_fname())

(2)打开matplotlibrc文件,查找:font.sans-serif

取消注释,添加:SimHei

(3)查找:axes.unicode_minus

取消注释,改True为False

2.Figure函数

plt.figtext()

在画布上添加文本注释


plt.figtext(0.5, 0.6, '这里是画布上的文本注释', fontsize=12, color='red', ha='center')

plt.show()

plt.figure()

实例化 figure 对象,即绘制图形的对象,可以通过这个对象,来设置图形的样式等

  • figsize:指定画布的大小,(宽度,高度),单位为英寸

  • dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为80

  • facecolor:背景颜色

  • edgecolor:边框颜色

  • frameon:是否显示边框

fig=plt.figure(figsize=(5,5),facecolor='lightgreen',edgecolor='red',frameon=True)
# 显示画布
plt.show()


plt.show()

显示数字

# 创建数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

fig, ax = plt.subplots()

# 绘制折线图
ax.plot(x, y)

# 在每个点上显示数字
for i in range(len(x)):
    ax.text(x[i], y[i], str(y[i]), fontsize=12, ha='right')

plt.show()


plt.savefig()

保存当前画布

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('保存画布的折线图')

# 保存画布到文件
plt.savefig('my_figure.png',dpi=300)

plt.show()

plt.close()

关闭画布窗口

plt.tight_layout()

使子图之间的间距以及子图与图像边缘之间的间距尽可能紧凑

确保子图的标题和轴标签不会重叠。

fig.add_subplot(rows, cols, index)

创建并返回一个子图对象。

rows:子图的行数

cols:子图的列数

index:子图的索引

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

fig=plt.figure(figsize=(12,4))

ax1=fig.add_subplot(1,3,1)
ax1.plot(x,y1,label="sin(x)")
ax1.legend()

ax2=fig.add_subplot(1,3,2)
ax2.plot(x,y2,label="cos(x)")
ax2.legend()

ax3=fig.add_subplot(1,3,3)
ax3.plot(x,y3,label="tan(x)")
ax3.legend()

plt.tight_layout()
plt.show()

plt.add_subplots(cow,col,figsize=(height,width))

将figure()和add_subplot()合二为一

用于创建一个包含多个子图(subplots)的图形窗口。

  • nrows: 子图的行数。

  • ncols: 子图的列数。

  • figsize: 图形的尺寸,以英寸为单位。

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# 创建图形和子图
fig, axs = plt.subplots(1, 3, figsize=(12, 4))

# 第一个子图
axs[0].plot(x, y1, label='sin(x)')
axs[0].set_title('Sine Wave')
axs[0].set_xlabel('X-axis')
axs[0].set_ylabel('Y-axis')
axs[0].legend()

# 第二个子图
axs[1].plot(x, y2, label='cos(x)')
axs[1].set_title('Cosine Wave')
axs[1].set_xlabel('X-axis')
axs[1].set_ylabel('Y-axis')
axs[1].legend()

# 第三个子图
axs[2].plot(x, y3, label='tan(x)')
axs[2].set_title('Tangent Wave')
axs[2].set_xlabel('X-axis')
axs[2].set_ylabel('Y-axis')
axs[2].legend()

# 显示图形
plt.tight_layout()
plt.show()

fig.add_axes([left, bottom, width, height] )

在画布(Figure)中添加轴

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

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

fig = plt.figure()

# 在画布中添加一个轴对象
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # [left, bottom, width, height]

# 绘制数据
ax.plot([1, 2, 3], [4, 10, 6])

plt.show()

3.Axes函数

ax.legend()

用于添加图例,以便识别图中的不同数据系列。图例会自动显示每条线或数据集的标签。

  • labels 是一个字符串列表,用来指定标签的名称

  • loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示

  • handles 参数,是一个列表,包含了所有线型的实例

loc 参数:

位置字符串表示整数数字表示
自适应Best0
右上方upper right1
左上方upper left2
左下lower left3
右下lower right4
右侧right5
居中靠左center left6
居中靠右center right7
底部居中lower center8
上部居中upper center9
中部center10
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建图形和轴域
fig, ax = plt.subplots()

# 绘制数据
line1, = ax.plot(x, y1)
line2, = ax.plot(x, y2)

# 添加图例,手动指定标签
ax.legend(handles=[line1, line2], labels=['正弦函数', '余弦函数'],loc='center')

plt.show()

将label定义在plot方法中,调用legend方法时不用再定义labels,会自动添加label

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

# 创建图形和轴域
fig, ax = plt.subplots()

# 绘制数据
line1, = ax.plot(x, y1, label='正弦函数')
line2, = ax.plot(x, y2, label='余弦函数')

# 添加图例,手动指定标签
ax.legend(handles=[line1, line2], loc='center')

# 显示图形
plt.show()

ax.text()

在折线图上添加文本

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 创建一个新的画布和轴对象
fig, ax = plt.subplots()

# 绘制折线图
ax.plot(x, y)

# 在指定位置添加文本
ax.text(3, 5, '这是文本', fontsize=20, color='red')

plt.show()

在散点图上添加文本

# 创建数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
labels = ['A', 'B', 'C', 'D', 'E']

# 创建一个新的画布和轴对象
fig, ax = plt.subplots()

# 绘制散点图
ax.scatter(x, y)

# 在每个点上添加文本标签
for i in range(len(x)):
    ax.text(x[i], y[i], labels[i], fontsize=12, ha='right')

plt.show()

在柱状图上添加文本

categories = ['A', 'B', 'C', 'D', 'E']
values = [5, 7, 3, 8, 6]

fig, ax = plt.subplots()

bars = ax.bar(categories, values)

# 在每个柱子上添加文本标签
for bar in bars:
    height = bar.get_height()
    ax.text(bar.get_x() + bar.get_width() / 2, height, f'{height}', ha='center', va='bottom')

plt.show()

ax.set_title()、ax.set_xlabel()和ax.set_ylabel()

设置当前轴的标题、x轴标签、y轴的标签

fig, ax = plt.subplots()

# 设置标题和标签
ax.set_title('置当前轴的标题')
ax.set_xlabel('设置x轴标签')
ax.set_ylabel('设置y轴标签')

plt.show()

ax.set_xlim([min,max])和ax.set_ylim([min,max])

ax.set_xlim(min,max)和ax.set_ylim(min,max)

设置x轴区间大小、y轴的区间大小

# 引入 pyplot
from matplotlib import pyplot as plt
# 引入 numpy
import numpy as np

import math

# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

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

# 绘制数据
ax.plot(x, y, label='sin(x)')

# 设置标题和标签
ax.set_title('Sine Wave')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

# 设置 X 轴和 Y 轴的范围
ax.set_xlim(0, 2*math.pi)
ax.set_ylim(-1.5, 1.5)

# 添加图例
ax.legend()
# 显示图形
plt.show()

ax.set_xscale(str)和ax.set_yscale(str)

设置x轴缩放比例、y轴的缩放比例

  • 'linear': 线性缩放(默认)
  • 'log': 对数缩放
  • 'symlog': 对称对数缩放,适用于包含正负值的数据
  • 'logit': Logit缩放,适用于概率数据
y = [1, 2, 3, 4, 5]
x = [200, 300, 500, 700, 1100]

# 创建一个新的画布和轴对象
fig, ax = plt.subplots()

# 绘制折线图
ax.plot(x, y)

# 设置X轴为对数缩放比例,Y轴为线性缩放比例
ax.set_xscale('log')
ax.set_yscale('linear')

plt.show()

ax.set_xticks()和ax.set_yticks()、ax.get_xticks()和ax.get_yticks()

获取或设置x轴刻标和相应标签,获取或设置y轴的刻标和相应标签a

fig, ax = plt.subplots()

# 设置X轴和Y轴的刻标和相应标签
ax.set_xticks([1, 2, 3, 4, 5])
ax.set_xticklabels(['一', '二', '三', '四', '五'])
ax.set_yticks([2, 3, 5, 7, 11])
ax.set_yticklabels(['二', '三', '五', '七', '十一'])

# 获取当前X轴和Y轴的刻标位置
current_xticks = ax.get_xticks()
current_yticks = ax.get_yticks()
print(f'当前X轴刻标位置: {current_xticks}')
print(f'当前Y轴刻标位置: {current_yticks}')

plt.show()

ax.twinx() 和 ax.twiny()

用于在同一个图形中创建共享 X 轴或 Y 轴的多个子图。

ax2 = ax1.twinx()
ax2 = ax1.twiny()

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.exp(x)

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

# 绘制第一个数据集
ax1.plot(x, y1, 'b-', label='sin(x)')
ax1.set_xlabel('X-axis')
ax1.set_ylabel('sin(x)', color='b')

# 创建共享 X 轴的子图
ax2 = ax1.twinx()

# 绘制第二个数据集
ax2.plot(x, y2, 'r-', label='exp(x)')
ax2.set_ylabel('exp(x)', color='r')

ax1.legend()
ax2.legend()

plt.show()

ax.grid(b=None, which='major', axis='both', **kwargs)

  • b: 是否显示网格线,默认为 None,表示根据当前设置显示或隐藏网格线。

  • which: 要显示的网格线类型: 'major'(主刻度)、'minor'(次刻度)、 'both'(主刻度和次刻度)。

  • axis: 要显示网格线的轴:'both'、'x' 、'y'。

  • **kwargs: 其他可选参数,用于定制网格线的外观,如 color、linestyle(ls)、linewidth(lw) 等。

x = np.arange(1, 10, 0.01)
y = 2 ** x
fig = plt.figure()
axs = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axs.plot(x, y)
axs.set_ylabel("axis_y")
axs.set_xlabel("axis_x")
axs.legend(loc='upper center')
axs.grid(True, axis='both', color='r', ls="--", lw=0.5)
plt.show()

ax = plt.subplot2grid(shape, loc, rowspan=1, colspan=1)

用于在网格中创建子图。允许更灵活地指定子图的位置和大小,以非等分的形式对画布进行切分,可以创建复杂的布局。

  • shape: 网格的形状,格式为 (rows, cols),表示网格的行数和列数,在figure中式全局设置。

  • loc: 子图的起始位置,格式为 (row, col),表示子图在网格中的起始行和列。

  • rowspan: 子图占据的行数,默认为 1。

  • rcolspan: 子图占据的列数,默认为 1。

x=np.linspace(0,10,50)
y1=x**-1
y2=2*x**2-12*x+5

fig = plt.figure(figsize=(12, 8))
ax = plt.subplot2grid((8,8),(0,1),rowspan=3,colspan=3)
ax.plot(x,y1,label="x**-1")
ax.legend()

ax2 = plt.subplot2grid((8,8),(0,4),rowspan=4,colspan=4)
ax2.plot(x,y2,label="6*x**2-3*x+5")
ax2.legend()

plt.tight_layout()
plt.show()

4.格式字符串

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

颜色

bgrcmykw
蓝色绿色红色青色洋红色黄色黑色白色

标记

.,ov^<>sp
点标记像素标记圆圈标记向下三角标记向上三角标记向左三角标记向右三角标记方形标记五边形标记
*hH+xDd|_
星形标记六边形标记 1六边形标记 2加号标记叉号标记菱形标记细菱形标记竖线标记横线标记

线条样式

----.:
实线虚线点划线点线
# 导入 pylab 库
import pylab

x = pylab.linspace(-6, 6, 40)
# 基于 x 构建 y 的数据
y = x**2
# 绘制图形
pylab.plot(x,y,'r:x')
# 展示图形
pylab.show()

5.绘图API

柱状图(Bar Chart)

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 等。

绘制条形图

categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 34, 67]

plt.bar(categories, values, color='skyblue')

plt.title('条形图示例')
plt.xlabel('类别')
plt.ylabel('值')

plt.show()

堆叠柱状图

categories = ['A', 'B', 'C', 'D']
values1 = [20, 35, 30, 25]
values2 = [15, 25, 20, 10]

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

# 绘制第一个数据集的柱状图
ax.bar(categories, values1, color='skyblue', label='Values 1')

# 绘制第二个数据集的柱状图,堆叠在第一个数据集上
ax.bar(categories, values2, bottom=values1, color='lightgreen', label='Values 2')

# 设置标题和标签
ax.set_title('Stacked Bar Chart')
ax.set_xlabel('Categories')
ax.set_ylabel('Values')

# 添加图例
ax.legend()

plt.show()

分组柱状图

categories = ['A', 'B', 'C', 'D']
values1 = [20, 35, 30, 25]
values2 = [15, 25, 20, 10]

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

# 计算柱状图的位置
x = np.arange(len(categories))
width = 0.35

# 绘制第一个数据集的柱状图
ax.bar(x - width/2, values1, width, color='skyblue', label='Values 1')

# 绘制第二个数据集的柱状图
ax.bar(x + width/2, values2, width, color='lightgreen', label='Values 2')

# 设置 X 轴标签
ax.set_xticks(x)
ax.set_xticklabels(categories)

# 设置标题和标签
ax.set_title('Grouped Bar Chart')
ax.set_xlabel('Categories')
ax.set_ylabel('Values')

# 添加图例
ax.legend()

plt.show()

水平条形图(Barh)

plt.barh(categories, values, color='skyblue')

categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 34, 67]

# 创建水平条形图
plt.barh(categories, values, color='skyblue')

plt.show()

箱型图(boxplot)

plt.boxplot(data, labels=['A', 'B', 'C'])

# 生成一些随机数据
np.random.seed(123)
data = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 创建箱型图
plt.boxplot(data, labels=['A', 'B', 'C'])

plt.show()

直方图(Histogram)

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: 其他可选参数,用于定制直方图的外观,如 coloredgecolorlinewidth 等。

# 生成一些随机数据
np.random.seed(123)
data = np.random.normal(0, 1, 1000)  # 均值为0,标准差为1的正态分布数据

# 创建直方图
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

plt.show()

2D直方图(Histogram2D)

plt.hist2d(x, y, bins=30, cmap='Blues')

# 生成一些随机二维数据
np.random.seed(123)
x = np.random.normal(0, 1, 1000)  # 均值为0,标准差为1的正态分布数据
y = np.random.normal(0, 1, 1000)  # 均值为0,标准差为1的正态分布数据

# 创建2D直方图
plt.hist2d(x, y, bins=30, cmap='Blues')

# 添加颜色条
plt.colorbar(label='频数')


plt.title('2D直方图示例')
plt.xlabel('X值')
plt.ylabel('Y值')

plt.show()

饼图(Pie Chart)

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: 其他可选参数,用于定制饼图的外观。

labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 45, 10, 20]  # 每个类别的比例
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'orange']
explode = (0.1, 0, 0, 0, 0)  # 突出显示第一个类别

# 创建饼状图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=True, startangle=140)

# 使饼状图为正圆形
plt.axis('equal')

# 添加标题
plt.title('饼状图示例')

plt.show()

折线图(plot)

pylab.plot(x, y, format_string=None, **kwargs)

在坐标轴上画线或者标记

  • x: x 轴数据,可以是一个数组或列表。

  • y: y 轴数据,可以是一个数组或列表。

  • format_string: 格式字符串,用于指定线条样式、颜色等。

  • **kwargs: 其他关键字参数,用于指定线条的属性,如标签。

极坐标图(polar chart)

plot(theta, r, color='r', linewidth=2)

# 生成一些极坐标数据
theta = np.linspace(0, 2 * np.pi, 100)  # 角度从0到2π
r = np.abs(np.sin(2 * theta) * np.cos(2 * theta))  # 半径

# 创建极坐标图
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r, color='r', linewidth=2)

plt.show()

散点图(Scatter Plot)

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: 其他可选参数,用于定制散点图的外观。

堆叠图(Stackplot)

stackplot(x, y1, y2, y3, labels=['A', 'B', 'C'])

np.random.seed(123)
x = np.arange(0, 10, 1)  # x轴数据
y1 = np.random.rand(10)  # 第一组数据
y2 = np.random.rand(10)  # 第二组数据
y3 = np.random.rand(10)  # 第三组数据

# 创建堆叠图
plt.stackplot(x, y1, y2, y3, labels=['A', 'B', 'C'])

# 添加标题和标签
plt.title('堆叠图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 添加图例
plt.legend(loc='upper left')

plt.show()

火柴图(Stem)

用来绘制二维离散数据

plt.stem(x, y, linefmt='b-', markerfmt='bo', basefmt='r-')

# 生成一些离散数据
np.random.seed(123)
x = np.arange(0, 10, 1)  # x轴数据
y = np.random.rand(10)  # y轴数据

# 创建火柴图
plt.stem(x, y, linefmt='b-', markerfmt='bo', basefmt='r-')

# 添加标题和标签
plt.title('火柴图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')

plt.show()


阶梯图(Step)

plt.step(x, y, where='pre', color='blue', linewidth=2)

x = np.linspace(0, 10, 10)  # x轴数据
y = np.sin(x)  # y轴数据

# 创建阶梯图
plt.step(x, y, where='pre', color='blue', linewidth=2)

plt.show()

二维箭头图(Quiver)

plt.quiver(x, y, u, v, color='blue')

# 生成一些二维向量数据
x, y = np.meshgrid(np.arange(0, 2 * np.pi, 0.2), np.arange(0, 2 * np.pi, 0.2))
u = np.cos(x)
v = np.sin(y)

# 创建箭头图
plt.quiver(x, y, u, v, color='blue')

# 显示图表
plt.show()

轮廓图(等高线 Meshgrid)

X, Y = np.meshgrid(x, y)

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 创建轮廓图
plt.figure(figsize=(8, 6))
contour = plt.contour(X, Y, Z, levels=10, colors='black')
plt.clabel(contour, inline=True, fontsize=8)

# 创建填充的轮廓图
plt.contourf(X, Y, Z, levels=10, cmap='RdYlBu_r')

# 添加颜色条
plt.colorbar()

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值