Python Matplotlib简易教程(小白教程)


Posted in Python onJuly 28, 2020

简单演示

import matplotlib.pyplot as plt
import numpy as np

# 从[-1,1]中等距去50个数作为x的取值
x = np.linspace(-1, 1, 50)
print(x)
y = 2*x + 1
# 第一个是横坐标的值,第二个是纵坐标的值
plt.plot(x, y)
# 必要方法,用于将设置好的figure对象显示出来
plt.show()

Python Matplotlib简易教程(小白教程)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 50)
y = 2**x + 1
# 第一个是横坐标的值,第二个是纵坐标的值
plt.plot(x, y) 
plt.show()

Python Matplotlib简易教程(小白教程)

显示多个图像

import matplotlib.pyplot as plt
import numpy as np

# 多个figure
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1

# 使用figure()函数重新申请一个figure对象
# 注意,每次调用figure的时候都会重新申请一个figure对象
plt.figure()
# 第一个是横坐标的值,第二个是纵坐标的值
plt.plot(x, y1)

# 第一个参数表示的是编号,第二个表示的是图表的长宽
plt.figure(num = 3, figsize=(8, 5))
# 当我们需要在画板中绘制两条线的时候,可以使用下面的方法:
plt.plot(x, y2)
plt.plot(x, y1, 
     color='red',  # 线颜色
     linewidth=1.0, # 线宽 
     linestyle='--' # 线样式
    )

plt.show()

这里会显示两个图像:

Python Matplotlib简易教程(小白教程)

Python Matplotlib简易教程(小白教程)

去除边框,指定轴的名称

import matplotlib.pyplot as plt
import numpy as np

# 从[-1,1]中等距去50个数作为x的取值
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1

# 请求一个新的figure对象
plt.figure()
# 第一个是横坐标的值,第二个是纵坐标的值
plt.plot(x, y1) 

# 设置轴线的lable(标签)
plt.xlabel("I am x")
plt.ylabel("I am y")

plt.show()

Python Matplotlib简易教程(小白教程)

同时绘制多条曲线

import matplotlib.pyplot as plt
import numpy as np

# 从[-1,1]中等距去50个数作为x的取值
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1
# num表示的是编号,figsize表示的是图表的长宽
plt.figure(num = 3, figsize=(8, 5)) 
plt.plot(x, y2)
# 设置线条的样式
plt.plot(x, y1, 
     color='red', # 线条的颜色
     linewidth=1.0, # 线条的粗细
     linestyle='--' # 线条的样式
    )

# 设置取值参数范围
plt.xlim((-1, 2)) # x参数范围
plt.ylim((1, 3)) # y参数范围

# 设置点的位置
new_ticks = np.linspace(-1, 2, 5)
plt.xticks(new_ticks)
# 为点的位置设置对应的文字。
# 第一个参数是点的位置,第二个参数是点的文字提示。
plt.yticks([-2, -1.8, -1, 1.22, 3],
     [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$readly\ good$'])

# gca = 'get current axis'
ax = plt.gca()
# 将右边和上边的边框(脊)的颜色去掉
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 绑定x轴和y轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 定义x轴和y轴的位置
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

plt.show()

Python Matplotlib简易教程(小白教程)

多条曲线之曲线说明

import matplotlib.pyplot as plt
import numpy as np

# 从[-1,1]中等距去50个数作为x的取值
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1

# 第一个参数表示的是编号,第二个表示的是图表的长宽
plt.figure(num = 3, figsize=(8, 5)) 
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

# 设置取值参数
plt.xlim((-1, 2))
plt.ylim((1, 3))

# 设置lable
plt.xlabel("I am x")
plt.ylabel("I am y")

# 设置点的位置
new_ticks = np.linspace(-1, 2, 5)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22,3],
     [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$readly\ good$'])


l1, = plt.plot(x, y2, 
        label='aaa'
       )
l2, = plt.plot(x, y1, 
        color='red', # 线条颜色
        linewidth = 1.0, # 线条宽度
        linestyle='-.', # 线条样式
        label='bbb' #标签
       )

# 使用legend绘制多条曲线
plt.legend(handles=[l1, l2], 
      labels = ['aaa', 'bbb'], 
      loc = 'best'
     )

plt.show()

Python Matplotlib简易教程(小白教程)

多个figure,并加上特殊点注释

import matplotlib.pyplot as plt
import numpy as np

# 从[-1,1]中等距去50个数作为x的取值
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1

plt.figure(figsize=(12, 8)) # 第一个参数表示的是编号,第二个表示的是图表的长宽
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

# gca = 'get current axis'
ax = plt.gca()
# 将右边和上边的边框(脊)的颜色去掉
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 绑定x轴和y轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 定义x轴和y轴的位置
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 显示交叉点
x0 = 1
y0 = 2*x0 + 1
# s表示点的大小,默认rcParams['lines.markersize']**2
plt.scatter(x0, y0, s = 66, color = 'b')
# 定义线的范围,X的范围是定值,y的范围是从y0到0的位置
# lw的意思是linewidth,线宽
plt.plot([x0, x0], [y0, 0], 'k-.', lw= 2.5)

# 设置关键位置的提示信息
plt.annotate(r'$2x+1=%s$' % 
       y0, 
       xy=(x0, y0), 
       xycoords='data',
       
       xytext=(+30, -30),
       textcoords='offset points',
       fontsize=16, # 这里设置的是字体的大小
       # 这里设置的是箭头和箭头的弧度
       arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')
      )

# 在figure中显示文字信息
# 可以使用\来输出特殊的字符\mu\ \sigma\ \alpha
plt.text(0, 3, 
     r'$This\ is\ a\ good\ idea.\ \mu\ \sigma_i\ \alpha_t$',
     fontdict={'size':16,'color':'r'})

plt.show()

Python Matplotlib简易教程(小白教程)

tick能见度设置

import matplotlib.pyplot as plt
import numpy as np

# 从[-1,1]中等距去50个数作为x的取值
x = np.linspace(-1, 1, 50)
y = 2*x - 1

plt.figure(figsize=(12, 8)) # 第一个参数表示的是编号,第二个表示的是图表的长宽
# alpha是设置透明度的
plt.plot(x, y, color='r', linewidth=10.0, alpha=0.5)

# gca = 'get current axis'
ax = plt.gca()
# 将右边和上边的边框(脊)的颜色去掉
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 绑定x轴和y轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 定义x轴和y轴的位置
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 可以使用tick设置透明度
for label in ax.get_xticklabels() + ax.get_yticklabels():
  label.set_fontsize(12)
  label.set_bbox(dict(facecolor='y', edgecolor='None', alpha=0.7))

plt.show()

Python Matplotlib简易教程(小白教程)

多条曲线通用例子

def init_colors():
  return ['blue', 'red', 'green', 'black', 'pink', 'purple', 'gray', 'yellow']

def show_graph(data, save_png_name=None, colors=init_colors()):
  """
  绘制折线图
  :param data: 数据格式:{label:{X:Y}, label:{X:Y}...}
  :param save_png_name:保存的图片的名字
  :param colors: 颜色列表
  :return:
    None
  """
  # 解决中文显示乱码的问题,不用中文就不需要设置了
  my_font = font_manager.FontProperties(fname="/自己补充路径/IOS8.ttf")
  
  plt.figure(figsize=(14, 6))
  plts = []
  labels = []
  for index, label in enumerate(data.keys()):
    if label is 'rotate':
      continue
    color = colors[index]
    X = data.get(label).keys()
    Y = [data.get(label).get(x) for x in X]
    temp, = plt.plot(X, Y, color=color, label=label)
    plts.append(temp)
    labels.append(label)
  plt.legend(handles=plts, labels=labels, prop=my_font)
  plt.show()
  if save_png_name is not None:
    plt.savefig(save_png_name)

Python Matplotlib简易教程(小白教程)

Python Matplotlib简易教程(小白教程)

散点图

import matplotlib.pyplot as plt
import numpy as np

n = 1024
# 从[0]
X = np.random.normal(0, 1, n)
Y = np.random.normal(0, 1, n)
T = np.arctan2(X, Y)

plt.scatter(np.arange(5), np.arange(5))

plt.xticks(())
plt.yticks(())

plt.show()

Python Matplotlib简易教程(小白教程)

条形图

import matplotlib.pyplot as plt
import numpy as np

n = 12
X = np.arange(n)
Y1 = (1 - X/float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X/float(n)) * np.random.uniform(0.5, 1.0, n)

plt.figure(figsize=(12, 8))
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

for x, y in zip(X,Y1):
  # ha: horizontal alignment水平方向
  # va: vertical alignment垂直方向
  plt.text(x, y+0.05, '%.2f' % y, ha='center', va='bottom')

for x, y in zip(X,-Y2):
  # ha: horizontal alignment水平方向
  # va: vertical alignment垂直方向
  plt.text(x, y-0.05, '%.2f' % y, ha='center', va='top')
  
# 定义范围和标签
plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-1.25, 1.25)
plt.yticks(())

plt.show()

Python Matplotlib简易教程(小白教程)

contour等高线图

import matplotlib.pyplot as plt
import numpy as np

def get_height(x, y):
  # the height function
  return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X, Y = np.meshgrid(x, y)

plt.figure(figsize=(14, 8))

# use plt.contourf to filling contours
# X, Y and value for (X, Y) point

# 横坐标、纵坐标、高度、 、透明度、cmap是颜色对应表
# 等高线的填充颜色
plt.contourf(X, Y, get_height(X, Y), 16, alpah=0.7, cmap=plt.cm.hot) 

# use plt.contour to add contour lines
# 这里是等高线的线
C = plt.contour(X, Y, get_height(X, Y), 16, color='black', linewidth=.5)

# adding label
plt.clabel(C, inline=True, fontsize=16)

plt.xticks(())
plt.yticks(())
plt.show()

Python Matplotlib简易教程(小白教程)

image图片显示

import matplotlib.pyplot as plt
import numpy as np

# image data
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
       0.365348418405, 0.439599930621, 0.525083754405,
       0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)

"""
for the value of "interpolation", check this:
http://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html
for the value of "origin"= ['upper', 'lower'], check this:
http://matplotlib.org/examples/pylab_examples/image_origin.html
"""

# 这是颜色的标注
# 主要使用imshow来显示图片,这里暂时不适用图片来显示,采用色块的方式演示。
plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower')
plt.colorbar(shrink=.90) # 这是颜色深度的标注,shrink表示压缩比例

plt.xticks(())
plt.yticks(())
plt.show()

Python Matplotlib简易教程(小白教程)

3D数据图

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(12, 8))
ax = Axes3D(fig)

# 生成X,Y
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X,Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)

# height value
Z = np.sin(R)

# 绘图
# rstride(row)和cstride(column)表示的是行列的跨度
ax.plot_surface(X, Y, Z, 
        rstride=1, # 行的跨度
        cstride=1, # 列的跨度
        cmap=plt.get_cmap('rainbow') # 颜色映射样式设置
        )

# offset 表示距离zdir的轴距离
ax.contourf(X, Y, Z, zdir='z', offest=-2, cmap='rainbow')
ax.set_zlim(-2, 2)

plt.show()

Python Matplotlib简易教程(小白教程)

Subplot多合一显示

import matplotlib.pyplot as plt
import numpy as np

plt.figure()

# 将整个figure分成两行两列
plt.subplot(2, 2, 1)
# 第一个参数表示X的范围,第二个是y的范围
plt.plot([0, 1], [0, 1])

plt.subplot(222)
plt.plot([0, 1], [0, 2])

plt.subplot(223)
plt.plot([0, 1], [0, 3])

plt.subplot(224)
plt.plot([0, 1], [0, 4])

plt.show()

Python Matplotlib简易教程(小白教程)

分格显示

subplot2grid

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec

plt.figure()
# 第一个元素表示将总的面板进行划分,划分为3行3列,
# 第二个元素表示该面板从0行0列开始,列的跨度(colspan)为3列,行的跨度(rowspan)为1
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3, rowspan=1)
# 第一个元素的表示X的范围为[1,2],第二个元素表示Y的范围为[1,2]
ax1.plot([1, 2], [1, 2])
ax1.set_title(r'$ax1\_title$')
# 第一个元素表示将总的面板进行划分,划分为3行3列,
# 第二个元素表示该面板从1行0列开始,列的跨度(colspan)为2列,行的跨度(rowspan)取默认值1
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
ax2.set_title(r'$ax2\_title$')
# 第一个元素表示将总的面板进行划分,划分为3行3列,
# 第二个元素表示该面板从1行2列开始,行的跨度(rowspan)为2列,列的跨度(colspan)取默认值1
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax3.set_title(r'$ax3\_title$')
# 第一个元素表示将总的面板进行划分,划分为3行3列,
# 第二个元素表示该面板从2行0列开始,行的跨度(rowspan)为2列,列的跨度(colspan)取默认值1
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax4.set_title(r'$ax4\_title$')
# 第一个元素表示将总的面板进行划分,划分为3行3列,
# 第二个元素表示该面板从2行1列开始,行的跨度(rowspan)为2列,列的跨度(colspan)取默认值1
ax5 = plt.subplot2grid((3, 3), (2, 1))
ax5.set_title(r'$ax5\_title$')

plt.tight_layout()
plt.show()

Python Matplotlib简易教程(小白教程)

gridspec

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
# 首先,定义网格的布局为3行3列
gs = gridspec.GridSpec(3, 3)
# 这里表示从0行全部都是ax1的
ax1 = plt.subplot(gs[0, :])
ax1.set_title(r'$ax1\_title$')

# 这里表示第一行中0列和1列都是ax2的
ax2 = plt.subplot(gs[1, :2])
ax2.set_title(r'$ax2\_title$')

# 这里表示第一行中2列是ax3的
ax3 = plt.subplot(gs[1:, 2])
ax3.set_title(r'$ax3\_title$')

# 这里表示最后一行中0列是ax4的
ax4 = plt.subplot(gs[-1, 0])
ax4.set_title(r'$ax4\_title$')

# 这里表示最后一行中倒数第二列是ax5的
ax5 = plt.subplot(gs[-1, -2])
ax5.set_title(r'$ax5\_title$')

plt.tight_layout()
plt.show()

Python Matplotlib简易教程(小白教程)

easy to define structure分格显示

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
# sharex表示共享X轴,sharey表示共享y轴
f, ((ax11, ax12), (ax21, ax22)) = plt.subplots(2, 2, sharex=True, sharey=True)
# 显示点(1, 2), (1, 2)
ax11.scatter([1, 2], [1, 2])

ax11.set_title('11')
ax12.set_title('11')
ax21.set_title('21')
ax22.set_title('22')

plt.tight_layout()
plt.show()

Python Matplotlib简易教程(小白教程)

图中图

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10, 6))
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]

# 大图
left, bottom, width, weight = 0.1, 0.1, 0.8, 0.8
ax1 = fig.add_axes([left, bottom, width, weight])
ax1.plot(x, y, 'r')
ax1.set_xlabel(r'$x$')
ax1.set_ylabel(r'$y$')
ax1.set_title(r'$××Interesting××$')

# 左上小图
left, bottom, width, weight = 0.2, 0.6, 0.25, 0.25
ax2 = fig.add_axes([left, bottom, width, weight])
ax2.plot(y, x, 'b')
ax2.set_xlabel(r'$x$')
ax2.set_ylabel(r'$y$')
ax2.set_title(r'$title\ inside\ 1$')

# 右下小图
plt.axes([0.6, 0.2, 0.25, 0.25])
# 将y的数据逆序输出[::1]
plt.plot(y[::-1],x, 'g')
plt.xlabel('x')
plt.ylabel('y')
plt.title(r'$title\ inside\ 2$')

plt.show()

Python Matplotlib简易教程(小白教程)

主次坐标轴

import matplotlib.pyplot as plt
import numpy as np

# 从[0, 10]以0.1为间隔,形成一个列表
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 * y1


fig, ax1 = plt.subplots()
# 镜像(上下左右颠倒)
ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b--')

# 为轴进行命名
ax1.set_xlabel(r'$X\ data$', fontsize=16)
ax1.set_ylabel(r'$Y1$', color='g', fontsize=16)
ax2.set_ylabel(r'$Y2$', color='b', fontsize=16)

plt.show()

Python Matplotlib简易教程(小白教程)

Animation动画

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation

fig, ax = plt.subplots()

# 从[0, 2*np.pi]以0.01为间隔,形成一个列表
x = np.arange(0, 2*np.pi, 0.01)
# 这里只需要列表的第一个元素,所以就用逗号“,”加空白的形式省略了列表后面的元素
line, = ax.plot(x, np.sin(x))

def animate(i):
  line.set_ydata(np.sin(x + i/100))
  return line, 

def init():
  line.set_ydata(np.sin(x))
  # 这里由于仅仅需要列表的第一个参数,所以后面的就直接用空白省略了
  return line, 

ani = animation.FuncAnimation(fig=fig, 
               func=animate, # 动画函数
               frames=100,  # 帧数
               init_func=init, # 初始化函数
               interval=20, # 20ms
               blit=True)

plt.show()

Python Matplotlib简易教程(小白教程)

到此这篇关于Python Matplotlib简易教程(小白教程)的文章就介绍到这了,更多相关Python Matplotlib简易教程内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
python 网络爬虫初级实现代码
Feb 27 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
python enumerate函数的使用方法总结
Nov 15 Python
Python实现的计数排序算法示例
Nov 29 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
Python生成rsa密钥对操作示例
Apr 26 Python
Python 中@property的用法详解
Jan 15 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 Python
Python把图片转化为pdf代码实例
Jul 28 #Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 #Python
Python 合并拼接字符串的方法
Jul 28 #Python
Python reques接口测试框架实现代码
Jul 28 #Python
如何用Matplotlib 画三维图的示例代码
Jul 28 #Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 #Python
Python同时迭代多个序列的方法
Jul 28 #Python
You might like
如何给phpadmin一个保护
2006/10/09 PHP
使用PHP批量生成随机用户名
2008/07/10 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
layui使用数据表格实现购物车功能
2019/07/26 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
详解Python中最难理解的点-装饰器
2017/04/03 Python
python如何为创建大量实例节省内存
2018/03/20 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python图片合成的示例
2020/11/09 Python
python如何调用php文件中的函数详解
2020/12/29 Python
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
单位成立周年感言
2014/01/26 职场文书
工作决心书范文
2014/03/11 职场文书
2014年党支部承诺书
2014/05/30 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
民间借贷借条范本
2015/05/25 职场文书
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript