Matplotlib1-学会自己手打图片

众所周知,Matplotlib 是 Python 的第三方绘图库,它非常类似于 MATLAB,主要用于数据分析、图像处理、计算机视觉等领域。但是Matplotlib不熟练,老是忘记基本用法,就很烦人,所以一怒之下,就做一个总结版。


1. Matplotlib Pyplot

        Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。使用的时候,我们可以使用 import 导入 pyplot 库,并设置一个别名 plt:

import matplotlib.pyplot as plt

这样我们就可以使用 plt 来引用 Pyplot 包的方法。

以下是一些常用的 pyplot 函数:

Matplotlib.pyplot接口
功能函数描述
绘制图形Bar()绘制条形图
Barth()绘制水平条形图
Boplot()绘制箱型图
HIst()绘制直方图
his2d()绘制2D直方图
Pie()绘制饼状图
Plot()在坐标轴上划线或者标记
Polar()绘制极坐标图
Scatter()绘制x与y的散点图
Stackplot()绘制堆叠图
Stem()用来绘制二维离散数据(又称为“火柴图”)
Step()绘制阶梯图
Quiver()绘制一个二维箭头
image函数Imread()从文件中读取图像的数据并形成数组。
Imsave()将数组另存为图像文件。
Imshow()在数轴区域内显示图像。
Figure函数Figure()创建一个新画布
Figtext()在画布上添加文本
Show()显示图像
Savefig()保存当前画布
Close()关闭画布窗口
Axis函数Axes()在画布(Figure)中添加轴
Text()向轴添加文本
Title()设置当前轴的标题
Xlabel()设置x轴标签
Xlim()获取或者设置x轴区间大小
Xscale()设置x轴缩放比例
Xticks()获取或设置x轴刻标和相应标签
Ylabel()设置y轴的标签
Ylim()获取或设置y轴的区间大小
Yscale()设置y轴的缩放比例
Yticks()

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


2.  pyplot 函数直接绘图

        matplotlib.pyplot模块能够快速地生成图像,以下实例,我们通过两个坐标 (0,0) 到 (6,100) 来绘制一条线:

import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([1, 2, 6, 8])
ypoints = np.array([3, 8, 1, 10])

plt.plot(xpoints, ypoints)
plt.show()

        如果我们不指定 x 轴上的点,则 x 会根据 y 的值来设置为 0, 1, 2, 3..N-1。例如:

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([3, 8, 1, 10, 5, 7])

plt.plot(ypoints)
plt.show()

        从上图可以看出 x 的值默认设置为 [0, 1, 2, 3, 4, 5]


3. figure图形对象和 axes轴域对象

        matplotlib可以使用面向对象的编程思想更好地控制和自定义图像。在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)

3.1 figure图形对象

Matplotlib 提供了matplotlib.figure图形类模块,通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。它包含了创建图形对象的方法。

from matplotlib import pyplot as plt
import numpy as np
import math

#创建输入数据
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)

#创建图形对象
fig = plt.figure()
'''
figure()函数包含以下参数:
figsize:指定画布的大小,(宽度,高度),单位为英寸。
dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。
facecolor:背景颜色。
dgecolor:边框颜色。
frameon:是否显示边框。
'''

# add_axes() 将 axes 轴域添加到画布中。
ax = fig.add_axes([0,0,1,1])
'''
add_axes() 的参数值是一个序列,
序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,
且每个数字必须介于 0 到 1 之间。
'''

# 绘制图像
ax.plot(x,y)
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
plt.show()

        

        需要的注意的是,当创建figure图形对象之后,figure对象的部分函数名和直接使用pyplot接口的函数名就变化了,例如设置X轴的标签,pyplot接口直接引用函数Xlabel(),而figure对象变为了set_xlabel()。

3.2 axes 轴域对象

        Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。2D 绘图区域(axes)包含两个轴(axis)对象;如果是 3D 绘图区域,则包含三个。

       axes 类可以理解为在一个给定的画布(figure)中确定可以绘图的位置,因此一个figure对象(画布)可以包含多个 axes 对象(绘图区域),但是同一个 axes 对象只能在一个画布中使用。figure对象通过调用 add_axes() 方法能够将 axes 对象添加到画布中,该方法用来生成一个 axes 轴域对象,对象的位置由参数rect决定。

        rect 是位置参数,接受一个由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。但是我们可以通过给画布添加 axes 对象可以实现在同一画布中插入另外的图像。

import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
y = np.sin(x)
axes1.plot(x, y, 'b')
axes2.plot(x,np.cos(x),'r')
axes1.set_title('sine')
axes2.set_title("cosine")
plt.show()

        接下来,则由pyplot 负责在确定好的绘图区域进行图像绘制。


4. pyplot.plot() 方法

        这是 axes 类的基本方法,它将一个数组的值与另一个数组的值绘制成线或标记,plot() 方法具有可选格式的字符串参数,用来指定线型、标记颜色、样式以及大小。

4.1 plot() 方法的参数

主要包括fmt参数、marker 参数、ms参数、mfc参数、mec参数。

  • fmt参数:定义了基本格式,如标记、线条样式和颜色。
fmt = '[marker][line][color]'
  • color参数:确定坐标点和连线的颜色。
  • linestyle 参数,简写为 ls:自定义坐标点之间连线的类型。
  • linewidth 参数,简写为 lw:自定义连线的宽度,值可以是浮点数,如:12.05.67 等。
  • marker 参数:自定义坐标点的标记形式。
  • markersize,简写为 ms:定义标记的大小。
  • markerfacecolor,简写为 mfc:定义标记内部的颜色。
  • markeredgecolor,简写为 mec:定义标记边框的颜色。
plot()函数参数
参数名标记描述
color'r'红色
'g'绿色
'b'蓝色
'c'青色
'm'品红
'y'黄色
'k'黑色
'w'白色
line'-'实线
':'虚线
'--'破折线
'-.'点划线
marker"."
","像素点
"o"实心圆
"v"下三角
"^"上三角
"<"左三角
">"右三角
"1"下三叉
"2"上三叉
"3"左三叉
"4"右三叉
"8"八角形
"s"正方形
"p"五边形
"*"星号
"h"六边形 1
"H"六边形 2
"+"加号
"P"加号(填充)
"x"乘号
"X"乘号 x (填充)
"D"菱形
"d"瘦菱形
"|"竖线
"_"横线
0 (TICKLEFT)左横线
1 (TICKRIGHT)右横线
2 (TICKUP)上竖线
3 (TICKDOWN)下竖线
4 (CARETLEFT)左箭头
5 (CARETRIGHT)右箭头
6 (CARETUP)上箭头
7 (CARETDOWN)下箭头
8 (CARETLEFTBASE)左箭头 (中间点为基准)
9 (CARETRIGHTBASE)右箭头 (中间点为基准)
10 (CARETUPBASE)上箭头 (中间点为基准)
11 (CARETDOWNBASE)下箭头 (中间点为基准)
"None", " " or ""没有任何标记
'$...$'渲染指定的字符。例如 "$f$" 以字母 f 为标记。

4.2 示例代码

# fmt 参数
import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints, 'o:r')
plt.show()

# 标记坐标点内部颜色
import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints, marker = 'o', ms = 20, mfc = 'r')
plt.show()


5. 轴标签和标题

        pyplot使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签,figure 对象使用set_xlabel()set_ylabel()来设置 x 轴和 y 轴的标签。同理,我们使用 title() 方法和set_title()方法来设置标题。

        xlabel()和 ylabel()函数在 Matplotlib 中有一些可选参数,这些参数可以用来定制标签的外观和位置。以下是一些常见的参数:

  • label:这是要显示的标签文本。
  • ha:水平对齐方式。可以是 'left', 'center' 或 'right'。
  • va:垂直对齐方式。可以是 'top', 'bottom', 'center' 或 'baseline'。
  • rotation:标签的旋转角度,以度为单位。
  • labelpad:标签与轴之间的距离(以点为单位)。
  • fontproperties:用于指定标签文字的字体属性。
  • weightsizecolor 等:这些是关于字体样式、大小和颜色的设置。
  • position:这是一个包含 x 和 y 坐标的元组,用于将标签放置在特定的位置。
  • sticky:用于确定标签是否与最近的轴端点对齐。
  • ax:一个轴对象,默认为当前的轴。

         title() 方法也有一些可选参数,这些参数可以用来定制标题的外观和位置。以下是一些常见的参数:

  • label:这是要显示的标题文本。
  • loc:标题的位置。可以是 'left', 'center' 或 'right'。
  • pad:标题与轴之间的距离(以点为单位)。
  • fontproperties:用于指定标题文字的字体属性。
  • sizecolor 等:这些是关于字体样式、大小和颜色的设置。
import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

plt.title("Example Test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.show()


6. 图例和网格线

6.1 图例legend()

axes 类的 legend() 方法负责绘制画布中的图例,它需要三个参数,如下所示:

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

legend() 方法的loc参数取值如下:

位置字符串表示整数数字表示

自适应      

 Best 0
右上方upper right1
左上方upper left2
左下lower left3
右下lower right4
右侧right5
居中靠左center left 6
居中靠右center right7
底部居中lower center 8
上部居中 upper center9
中部 center 10

6.2 网格线grid()

我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。

grid() 方法参数说明:

  • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
  • which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
  • axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
  • **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])


plt.title("grid() and legend() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)
plt.legend('T',loc='upper right')
plt.grid(color = 'r', linestyle = '--', linewidth = 0.5)

plt.show()


7. 坐标轴设置

        坐标轴的设置包括坐标轴范围设置、坐标轴缩放设置以及坐标轴刻度设置。

7.1 xlim和 ylim

        Matplotlib 可以根据自变量与因变量的取值范围,自动设置 x 轴与 y 轴的数值大小。当然,您也可以用自定义的方式,通过 xlim() 和 ylim() 对 x、y 轴的数值范围进行设置。当对 3D 图像进行设置的时,会增加一个 z 轴,此时使用 zlim() 可以对 z 轴进行设置。

        xlim()函数有两个参数:left和right。函数仅设置x轴的上下限范围,而不改变其他的坐标轴属性,如ticks设置、ticks名称、ticks属性等。 left和right都是数值类型的参数,表示了x轴的极限值,其中left参数是左侧x轴的极限值,right参数是右侧x轴的极限值。例如,plt.xlim(left=10, right=10)将设置x轴的上下限范围为0到10。

7.2 xscale和yscale

   在一个函数图像中,有时自变量 x 与因变量 y 是指数对应关系,这时需要将坐标轴刻度设置为对数刻度。Matplotlib 通过 axes 对象的xscale或yscale属性来实现对坐标轴的格式设置。

        xscale() 是 Matplotlib 中的一个函数,用于设置 x 轴的缩放比例。它有一些可选参数,可以帮助您定制 x 轴的显示方式。以下是一些常用的参数:

  • scale:用于设置 x 轴的缩放比例。可以是 'linear'(默认值,表示按线性比例缩放)、'log'(表示按对数比例缩放)或 'symlog'(表示按半对数半线性比例缩放)。
  • base:当 scale 参数设置为 'log' 时,该参数用于指定对数比例的基数。默认值为 10。
  • nonpos:当 scale 参数设置为 'log' 时,该参数用于指定如何处理非正数的位置。可以是 'x' 或 'mask'。
  • ax:一个轴对象,默认为当前的轴。

        这些参数中的大多数可以通过在调用 xscale()时直接传递给该函数来使用。例如,要设置 x 轴的缩放比例为对数并指定基数为 10,可以这样调用 xscale()函数:

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_xscale('log', base=10)  
plt.show()

7.3 xticks和 yticks

        刻度指的是轴上数据点的标记,Matplotlib 能够自动的在 x 、y 轴上绘制出刻度。xticks() 和 yticks() 函数接受一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。

        yticks() 函数在Matplotlib中用于设置y轴的刻度值。它有一些可选参数,这些参数可以帮助定制y轴的显示方式。以下是这些参数的详细说明:

  • ticks:这个参数是刻度的位置列表。您可以指定一个递增值向量,例如[0, 2, 4, 6]。此命令作用于当前坐标区。
  • labels:这个参数包含要放置在给定刻度位置的标签。这是一个可选参数。
  • ****kwargs:这个参数是Text属性的控制标签外观。

返回值:返回y轴刻度的位置列表和y轴刻度标签的Text对象的列表。

此外,yticks() 函数还有以下可选参数:

  • auto:设置自动模式,使坐标区确定y轴刻度值。如果更改了刻度值,然后又想将它们设置回默认值,则可以使用此选项。
  • manual:设置手动模式,将y轴刻度值冻结在当前值。如果希望在调整坐标区大小或者向坐标区添加新数据时保留当前刻度值,则可以使用此选项。
  • mode:返回当前y轴刻度值的模式,'auto'或'manual'。默认情况下,模式为自动,除非您指定刻度值或将模式更改为手动。
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)  
  
# 设置 y 轴刻度值和标签  
ax.set_yticks([0, 1, 2, 3])  
ax.set_yticklabels(['Label 1', 'Label 2', 'Label 3', 'Label 4'])  
  
# 显示图形  
plt.show()


8.  绘制子图

        在使用 Matplotlib 绘图时,我们可能需要将一张画布划分为若干个子区域,然后在每个区域画不同的子图。matplotlib.pyplot模块提供了三种子图绘制方式,分别是:subplot() 函数,subplots() 函数以及subplot2gird() 函数。

8.1 subplot() 函数

     matplotlib.pyplot模块提供了一个 subplot() 函数,它可以均等地划分画布,用于创建多个子图(subplot)的布局。该函数可以在一个图形窗口中绘制多个子图,以便同时显示多个图形。以下是 subplot()  函数的常用参数和说明

  • nrows, ncols:行数和列数,用于指定子图的网格布局。例如,nrows=2, ncols=3 将创建一个 2x3 的子图网格。
  • sharex, sharey:布尔值,用于指定是否共享 x 轴或 y 轴。如果设置为 True,则多个子图将共享相同的轴。
  • gridspec_kw:用于自定义网格布局的字典参数,例如设置网格间距、边距等。
  • ax:可选参数,用于指定子图对象。如果不提供此参数,则会自动创建一个新的子图对象。
  • figure:可选参数,用于指定包含子图的图形对象。如果不提供此参数,则会自动创建一个新的图形对象。
import matplotlib.pyplot as plt  
import numpy as np  
  
# 生成数据  
x = np.linspace(0, 10, 100)  
y1 = np.sin(x)  
y2 = np.cos(x)  
  
# 创建图形和子图  
fig = plt.figure()  
ax1 = fig.add_subplot(2, 2, 1)  # 创建一个 2x2 的子图网格,并在第 1 个位置上创建子图  
ax2 = fig.add_subplot(2, 2, 2)  # 在第 2 个位置上创建子图  
ax3 = fig.add_subplot(2, 2, 3)  # 在第 3 个位置上创建子图  
ax4 = fig.add_subplot(2, 2, 4)  # 在第 4 个位置上创建子图  
  
# 在各个子图上绘制数据  
ax1.plot(x, y1)  
ax1.set_title('Subplot 1')  
ax2.plot(x, y2)  
ax2.set_title('Subplot 2')  
ax3.plot(x, y1)  
ax3.set_title('Subplot 3')  
ax4.plot(x, y2)  
ax4.set_title('Subplot 4')  
  
# 显示图形  
plt.show()

        在上述示例中,我们使用 subplot() 函数创建了一个 2x2 的子图网格,并在每个位置上绘制了不同的数据。通过设置 nrows 和 ncols 参数,我们可以控制子图的网格布局。

        如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。如果不想覆盖之前的图,需要使用add_subplot()函。例如:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot([1,2,3])
ax2 = fig.add_subplot(221, facecolor='b')
ax2.plot([1,2,3])

8.2 subplots() 函数

        matplotlib.pyplot模块提供的subplots() 函数和 subplot() 函数的不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。因此subplots() 函数比subplot() 函数更加灵活,它同时允许在创建子图的同时指定图形的大小和位置。

以下是 subplots() 函数的常用参数和说明:

  • nrows, ncols:行数和列数,用于指定子图的网格布局。例如,nrows=2, ncols=3 将创建一个 2x3 的子图网格。
  • sharex, sharey:布尔值,用于指定是否共享 x 轴或 y 轴。如果设置为 True,则多个子图将共享相同的轴。
  • gridspec_kw:用于自定义网格布局的字典参数,例如设置网格间距、边距等。
  • figsize:一个元组,用于指定图形的大小(以英寸为单位)。例如,figsize=(8, 6) 将创建一个 8x6 英寸的图形。
  • subplot_kw:一个字典,用于传递给 add_subplot() 的关键字参数,用于自定义子图的布局和属性。
  • gridspec:一个 GridSpec 对象,用于更高级的网格布局自定义。
  • figure:可选参数,用于指定包含子图的图形对象。如果不提供此参数,则会自动创建一个新的图形对象。
import matplotlib.pyplot as plt  
import numpy as np  
  
# 生成数据  
x = np.linspace(0, 10, 100)  
y1 = np.sin(x)  
y2 = np.cos(x)  
  
# 创建图形和子图  
fig, axs = plt.subplots(2, 2, figsize=(8, 6), subplot_kw={'title': 'Subplot Title'})  
ax1 = axs[0, 0]  # 获取第 1 行第 1 列的子图对象  
ax2 = axs[0, 1]  # 获取第 1 行第 2 列的子图对象  
ax3 = axs[1, 0]  # 获取第 2 行第 1 列的子图对象  
ax4 = axs[1, 1]  # 获取第 2 行第 2 列的子图对象  
  
# 在各个子图上绘制数据  
ax1.plot(x, y1)  
ax2.plot(x, y2)  
ax3.plot(x, y1)  
ax4.plot(x, y2)  
  
# 显示图形  
plt.show()

在上述示例中,我们使用 subplots()函数创建了一个 2x2 的子图网格,并在每个位置上绘制了不同的数据。通过设置 nrows 和 ncols 参数,我们可以控制子图的网格布局。我们还使了 figsize 参数来指定图形的大小,并使用 subplot_kw 来设置子图的标题。最后,我们通过索引来访问各个子图对象,并在其上绘制数据。

8.3  subplot2grid()函数

        matplotlib.pyplot 模块提供了 subplot2grid() ,该函数能够在画布的特定位置创建 axes 对象(即绘图区域)。不仅如此,它还可以使用不同数量的行、列来创建跨度不同的绘图区域。与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。因此,这个函数比subplot()  和 subplots() 更加灵活,因为它允许您在任意位置和大小上创建子图。以下是 subplot2grid()  函数的常用参数和说明:

  • fig:一个 Figure 对象,指定包含子图的图形对象。
  • pos:一个元组,指定子图在图形中的位置。例如,pos=(1, 1, 1, 1) 将创建一个占据整个图形区域的子图。
  • ** rowspan, colspan**:整数,用于指定子图跨越的行数和列数。
  • ax:可选参数,用于指定子图对象。如果不提供此参数,则会自动创建一个新的子图对象。
  • sharex, sharey:布尔值,用于指定是否共享 x 轴或 y 轴。如果设置为 True,则多个子图将共享相同的轴。
  • gridspec_kw:用于自定义网格布局的字典参数,例如设置网格间距、边距等。
  • label:可选参数,用于给子图设置标签。
import matplotlib.pyplot as plt
#使用 colspan指定列,使用rowspan指定行
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
'''
shape:把该参数值规定的网格区域作为绘图区域;
location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。
'''

import numpy as np
x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()

matplotlib的基础部分就总结完毕了,剩下的就是如何使用各种绘图函数进行常规绘图以及高难度绘图了。这部分下个文章再讲!

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值