目录

  • 1. 基本用法与折线图
    • pyplot 模块的常用函数
    • 折线图函数: matplotlib.pyplot.plot()
    • 常用 format_string 参数
    • 常用函数 grid () 控制各轴网格线的显示状态
    • 常用函数 savefig() 保存当前画布内容
    • 常用函数 legend() 绘制图例
    • 常用函数 text() 添加文字
    • pyplot 的 rc 参数
      • 中文字符正常显示所需参数设置
      • 其它常用 rc 参数
  • 2. 绘制多个子图
    • 方法一: 先用 figure() 函数创建画布, 再用 figure.add_subplot() 方法创建子图
      • 创建画布
      • 创建子图
    • 方法二: 用 plt.subplots() 函数创建画布和子图
    • plt 常用函数 tight_layout()
  • 3. 散点图与拟合
    • 散点图函数 scatter()
    • numpy 补充
      • 多元正态分布矩阵
      • 多项式拟合函数
      • 多项式对象
    • 离散点拟合线绘制
    • pandas 的散点矩阵图函数
  • 4. 其它统计图
    • 直方图
    • 饼图
    • 柱状图
      • (1) 用 plt.bar()
      • (2) 用 pandas 的绘图功能
  • 5. 等高线图和三维表面图
    • 等高线图
    • 三维表面图
    • 示例
import matplotlib.pyplot as plt

1. 基本用法与折线图

pyplot 模块的常用函数

函数 描述
figure 创建一个空白画布,可以指定画布的大小和像素
figure.add_subplot 方法 创建并选中一个子图,可以指定子图所在的行号,列号和标号
subplots fig,ax = plt.subplots() 同时在 subplots 里建立一个 fig 对象、一个 axis 对象数组
title 在当前绘图区中添加标题,可以指定标题的名称、颜色、字体等参数
xlabel 在当前绘图区中添加 xxx 轴名称,可以指定名称、颜色、字体等参数
ylabel 在当前绘图区中添加 yyy 轴名称,可以指定名称、颜色、字体等参数
xlim 指定当前绘图区 xxx 轴的范围
ylim 指定当前绘图区 yyy 轴的范围
xticks 指定 xxx 轴刻度的数目与取值
yticks 指定 yyy 轴刻度的数目与取值
legend 指定当前绘图区的图例,可以指定图例的大小、位置、标签
plot 绘制点以及点之间的连续线条(折线图)
savefig 保存绘制的图形
show 在本机显示全部画布 figure 上的图形

折线图函数: matplotlib.pyplot.plot()

matplotlib.pyplot.plot(x, y, format_string, ...)

在当前画布 figure 的当前绘图区 Axes 中根据提供的 x,y 中的数据,在坐标系中一一对应绘制各点,以及上一点与下一点之间的连续线条。(折线图)

返回:由 matplotlib.lines.Line2D 线条组成的列表。

常用参数:

  • x:x 轴数据,以类似数组的数据提供。
  • y:y 轴数据,以类似数组的数据提供。
  • format_string:控制点与线的格式字串 ,由表示色彩、点的形状以及线条线型的字符组合而成。

format_string 数据格式字符串由三项组成,格式为:

format_string = '[颜色][标记形状][线型]'

分别表示绘制的颜色、数据点的标记形状或线型,其中这三项每一项都是可选的,并可前后自由组合搭配。

常用 format_string 参数

颜色缩写 说明(颜色全称) 点形状 说明 线型 说明
'b' 蓝色(blue) '.' '-' 实线
'g' 绿色(green) 'o' '--' 虚线
'r' 红色(red) '+' 加号 '-.' 点划线
'y' 黄色(yellow) '*' 星号 ':' 点构成的虚线
'k' 黑色(black) 'v' 向下三角形
'c' 青色(cyan) '^' 向上三角形
'm' 紫红色(magenta) '<' 向左三角形
'w' 白色(white) '>' 向右三角形

常用函数 grid () 控制各轴网格线的显示状态

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

常用参数:

  • b:逻辑值或 None。决定是否显示网格线。如果提供了任何 kwargs,则假定您要打开网格,并且 b 将被设置为 True。如果 bNone 且没有 kwargs,则将切换网格线的可见性。
  • which:哪些层级的刻度上需要网格线。主刻度、次刻度、两者:'major''minor''both'
  • axis:上述网格线出现在哪根轴。'both''x''y'

常用函数 savefig() 保存当前画布内容

matplotlib.pyplot.savefig(fname, dpi=None, quality=None,bbox_inches=None, ...)

常用参数:

  • fname:字符串文件名或者已打开的文件对象。如果 format 参数没有被设置,则输出格式从扩展名中获得(缺省:“PNG”)。
  • 支持的图像文件格式:eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff
  • dpi:分辨率。以每英寸点数为单位。如果为 None,则默认为使用当前画布图像的 dpi 值。
  • quality:图像质量。范围从 1(最差)到 95(最佳)。仅当格式为 jpg 或 jpeg 时适用,否则忽略。如果为 None,则默认为(默认值:95)。应避免超过 95 的值;100 则完全禁用 JPEG 优化。
  • bbox_inches:以英寸为单位的边界框:仅保存图形的给定部分。如果为 'tight',则为当前图像的 tight bbox。(保存矢量图不完整时可在保存时加上 bbox_inches = 'tight'

常用函数 legend() 绘制图例

matplotlib.pyplot.legend(labels, loc, bbox_to_anchor, title, fontsize, ...)
#实用格式:
legend()
legend(labels)
legend(handles, labels)

常用参数:

  • handles:已绘制的各种图形实例。可以用类似列表的方式提供。缺省值为所有已绘制的图形。
  • labels:图例文字。可用类似列表的方式提供。缺省值为绘制图形时在绘制的方法或函数中所提供的 label 参数。
  • loc:相对位置。它和 bbox_to_anchor 参数协同配合决定图例的最终位置。
    • 当不提供 bbox_to_anchor 参数时,loc 决定图例在图形边界中出现的相对位置。
    • loc 为两个元素的元组时,表示图例的左下角的 x,y 坐标(在整个坐标长度中的占比),此时 bbox_to_anchor 参数将失效。
    • 通常可以用字符串或数字来表示在区域中的相对位置 (见下表)。
  • bbox_to_anchor:图例锚定辅助参数:
    • (x, y, width, height):以四个元素的元组给出 bbox(相对区域),x, y 为该区域的左下角,其余两个为区域的宽和高,所有数据都是占比数。此时 loc 参数将被解释成在此区域中的相对位置。
    • (x,y):以两个元素的元组给出的相对坐标,此时 loc 参数将被被解释成为图例本身的“方位点”的坐标占比。
  • title:图例的标题。
  • fontsize:文字大小。数值型或字符串描述: 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'
loc 参数位置的表示
位置字符串 位置码
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10

常用函数 text() 添加文字

matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)

向图像中添加文本。

常用参数:

  • x, y: 浮点数, 放置文本的位置。默认情况下,这是在数据坐标中。可以使用 transform 参数更改坐标系。
  • s: 字符串, 要添加的文本。

返回:创建的 Text 实例。

pyplot 的 rc 参数

matplotlib.pyplot.rcParams 是一个字典,其中每个键值对的 “键”,对应以字符串形式表现的 rc 参数名,“值” 对应该参数的值。通过修改字典键值对中的值,即可设定 rc 参数。

中文字符正常显示所需参数设置

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['font.size'] = 14  # 调整字体大小
plt.rcParams['text.usetex'] = False  # 不使用 tex (与中文不能同时使用)

其它常用 rc 参数

rc 参数名称 说明 取值
lines.linewidth 线条宽度 0~10,默认值1.5
lines.linestyle 线条样式 4 种样式:“-”,”–”,”-.”,”:”
lines.marker 线条上点的样式 可以取”o”,”D”,”+”等
lines.markersize 点的大小 0~10,默认值1

2. 绘制多个子图

方法一: 先用 figure() 函数创建画布, 再用 figure.add_subplot() 方法创建子图

创建画布

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, ...)

返回:Figure 画布对象
常用参数:

  • num:画布的编号。如为 None,则系统自动提供(从 1 开始)。如为字符串,则作为画布窗口中的标题。
  • figsize:以英寸为单位的画布的尺寸,以 [ 宽, 高 ] 方式提供。缺省值为 [6.4, 4.8]
  • dpi:图像分辨率,设置每英寸的点数。缺省值为 100dpi
  • facecolor:画布的颜色。

创建子图

matplotlib.figure.Figure.add_subplot(nrows, ncols, index, **kwargs)

创建的子图将在具有 nrows 行和 ncols 列的虚拟布局网格上占据索引位置。索引从左上角的 1 位置开始并向右向下逐渐增加。

返回:创建的子图,类型为 axes.SubplotBase 或者其它 Axes 的子类。

一次只能创建一个子图。

常用参数:

  • nrows:在画布中的虚拟布局子图行数。
  • ncols:在画布中的虚拟布局子图列数。
  • index:在虚拟布局中创建的子图的索引号。决定子图的具体位置。

可以提供一个三位的数字,以合并的方式决定 nrowsncolsindex,因为通常行数和列数不会超过 9。
也可以三个参数分开提供。

方法二: 用 plt.subplots() 函数创建画布和子图

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, num=None, ...)

创建一张画布和一组子图。

返回:一个两个元素的元组:

  1. figFigure 画布
  2. axAxes 对象(子图)或 Axes 对象数组(多个子图)

常用参数:

  • nrowsncols:可选,默认值:1。子图网格的行数/列数。
  • sharexsharey:逻辑值或 'none''all''row''col'。控制 x (sharex) 或 y (sharey) 轴之间的属性共享:
    • True"all":x 轴或 y 轴将在所有子图中共享。
    • False"none":每个子图的 x 轴或 y 轴将是独立的。
    • "row":每个子图行将共享一个 x 轴或 y 轴。
    • "col":每个子图列将共享一个 x 轴或 y 轴。
    • 当子图沿列具有共享的 x 轴时,仅创建底部子图的 x 刻度标签。同样,当子图沿行具有共享的 y 轴时,仅创建第一列子图的 y 刻度标签。若要稍后打开其他子图的刻度标签,可使用 tick_params
  • num:指定画布编号。在指定的画布上创建子图。

plt 常用函数 tight_layout()

plt.tight_layout()

调整子图之间和周围的填充。可用于解决子图间轴标签、刻度标签以及标题重合的问题。

3. 散点图与拟合

散点图函数 scatter()

Axes.scatter (x, y, s=None, c=None, marker=None, alpha=None, linewidths=None, edgecolors=None, ... **kwargs)

功能:绘制散点图。

常用参数:

  • x, y:散点图的数据源。类数组数据。
  • s, c:点标记的尺寸(正常标记尺寸的平方)、标记的颜色。
  • marker:标记的风格,
  • alpha:透明度。0 透明,1 不透明。
  • linewidths:标记边缘线的宽度。
  • edgecolors:标记边缘线的颜色。

numpy 补充

多元正态分布矩阵

numpy.random.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8)

返回:数组
常用参数:

  • mean:是多维分布的均值。
  • cov:协方差矩阵。
  • size:指定生成的正态分布矩阵的大小。

多项式拟合函数

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

返回:通过 y=f(x)y=f(x)y=f(x) 关系中大量 xxx 和 yyy 的对应数据,以数组类型返回拟合后的多项式系数。
常用参数:

  • x, y:多项式 y=f(x)y=f(x)y=f(x) 中大量实际 xxx 值和 yyy 值,以类似数组方式提供。
  • deg:设定多项式中所希望的最高阶数。

多项式对象

numpy.poly1d(c_or_r, r = False, variable=None)

根据多项式系数,封装并返回多项式对象,以便进一步根据多项式计算更多的 xxx 值所对应的 yyy 值。

返回:多项式对象。如要算出真正的多项式的值,需要将多项式对象当作函数使用,参数可以是多个 xxx 值的序列,可得到多个多项式的结果值。
常用参数:

  • c_or_r :多项式的系数,类数组型。以幂次递减,或者如果 r 参数的值为True,则表示为多项式的根(多项式的值为 0 时 x 的值)。例如:

    • poly1d([1, 2, 3]) 代表 x2+2x+3x^2 + 2x + 3x2+2x+3
    • poly1d([1, 2, 3], True) 代表 (x−1)(x−2)(x−3)=x3−6x2+11x−6(x-1)(x-2)(x-3) = x^3 - 6x^2 + 11x -6(x−1)(x−2)(x−3)=x3−6x2+11x−6
  • r : 布尔型,可选。 如果为 True,则 c_or_r 指定多项式的根。默认值为 False

多项式对象属性:

  • c:多项式的各个系数
  • r:多项式的根(多项式的值为 0 时 x 的值)
  • o:多项式的阶数(最高幂次数)

离散点拟合线绘制

  • 根据数据调用 numpy.polyfit() 函数,获取多项式各项系数。
  • 根据多项式系数调用 numpy.poly1d() 函数构造多项式对象。
  • 通过类似函数调用的手法调用多项式对象,获得直线上各点的数据。(也可用 np.polyval() 得到拟合的预测值,参见 polyfit 进行多项式拟合)
  • 根据直线上各个点的数据使用 matplotlib.pyplot.plot() 函数绘制直线。

pandas 的散点矩阵图函数

pandas.plotting.scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal='hist', marker='.',…… **kwargs)

常用参数:

  • framepandas dataframe 对象。
  • diagonal: 对角线图形类型。‘hist’, ‘kde’ 中选择1个:
    • 'hist':表示直方图 (Histogram plot)
    • 'kde':表示核密度估计 (Kernel Density Estimation)。
    • 默认 'hist'。需要 scipy 模块的支持。

4. 其它统计图

直方图

Axes.hist(x, bins=None, range=None, histtype='bar', label=None, ...**kwargs)

根据数据绘制直方图。

常用参数:

  • x:指定要绘制直方图的数据。
  • bins:指定直方图条形的个数,默认 10。或序列表示的若干个区域边界。
  • range:指定直方图数据的上下界,超出范围的将被忽略。默认包含绘图数据的最大值和最小值。
  • histtype:画图的形状: 'bar', 'barstacked', 'step', 'stepfilled'

返回值:一个三个元素的元组,三个元素分别为:

  • n:表示每一区间的数据个数,并组成序列。
  • bins:区间分界点组成的序列。个数为 n 的长度 +1+1+1。
  • patches:各个分区对象组成的序列。

饼图

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, ...)

常用参数:

  • x:每块扇形占总和的百分比数值,如果 sum(x) >1>1>1 会使用 sum(x) 自动计算每块占总的百分比。
  • explode:每块扇形被炸离中心的距离,以相对于半径的比例来指定。
  • labels:每块扇形外侧显示的说明文字(数据标签)
  • colors:每块扇形的默认颜色: ‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’
  • autopct:控制饼图内百分比文字格式设置,可以使用格式化字符串。
  • pctdistance:饼内文字离开中心的距离,以相对于半径的比例来指定 autopct 的位置刻度, 默认值为 0.6
  • shadow:在饼图下面画一个阴影。默认值:False,即不画阴影;
  • labeldistancelabel 标签的绘制位置,类似于 pctdistance,相对于半径的比例,默认值为 1.1, 如 <1<1<1 则绘制在饼图内侧
  • startangle:起始绘制角度,默认图是从 x 轴正方向逆时针画起。

柱状图

(1) 用 plt.bar()

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, yerr, ...**kwargs)

常用参数:

  • x:x 轴数据。通常,每个分类与连续的各个整数对应,给 height 在 x 轴上定位。
  • height:y 轴对应柱的高度。数据个数与 x 的数据个数相同。
  • width:x 轴对应柱的相对宽度(等分宽度中的占比 ),默认 0.8 (保证柱与柱之间留有 0.2 的空隙)。
  • bottom:y 轴基准值,默认为 0。
  • yerr:y 轴误差线数据。

(2) 用 pandas 的绘图功能

DataFrame.plot.bar (x=None, y=None, **kwargs)

常用参数:

  • x:各个分类的名字,如果不指定,则使用 DataFrame 的行索引名作为各个分类名。
  • y:各个分类的数值数据,如果不指定,则使用 DataFrame 的所有数值列数据,列名为图例中的数据名。
  • rot:轴刻度文字的角度。
  • xlabelylabel:x 和 y 轴的轴标签。
  • xlimylim:以2个元素的元组或列表决定 x 或 y 轴的上下限。
  • title:子图标签。
  • grid:逻辑值,表示是否显示网格线(x、y 轴同时控制)

5. 等高线图和三维表面图

等高线图

matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)

绘制等高线。

matplotlib.pyplot.contourf([X, Y,] Z, [levels], **kwargs)

填充等高线轮廓。

contour()contourf() 分别绘制等高线和填充等高线。主要参数和返回值相同。

常用参数:

  • X, Y: 类数组,可选, Z 中的值的坐标。XY 必须都是 2D 且具有与 Z 相同的形状 (例如,通过 numpy.meshgrid() 创建); 或者它们必须都是 1-D 且使得 len(X) =N= N=N 为 Z 的列数, len(Y) =M= M=M 是 Z 的行数。 XY 都必须单调排序。
    如果未给出,则假定它们是整数索引,即 X = range(N)Y = range(M)
  • Z: 形状为 (M, N) 的类数组, 需绘制的高度值。
  • levels: int 或类数组,可选, 确定等高线/区域的数量和位置。如果是 int nnn,则用 MaxNLocatorvminvmax 之间自动选择不超过 n+1n+1n+1 个较好的轮廓级别。如果是类数组,则在指定级别绘制等高线, 这些值必须按升序排列。

返回: matplotlib.contour.QuadContourSet 对象。

三维表面图

首先需要通过将 projection="3d" 关键字参数传递给 Figure.add_subplot 来创建 3D 坐标轴(属于 Axes3D 类)。

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

(3D Axes 中也可以用 plot, scatter 等绘制折线图, 散点图等, 参见官方文档)

绘制三维表面图函数:

Axes3D.plot_surface(X, Y, Z, *args, norm=None, vmin=None, vmax=None, lightsource=None, **kwargs)

参数:

  • X, Y, Z: 二维数组, 数据值。
  • norm: 标准化, 颜色图的规范化。
  • vmin, vmax: float, 规范化的界限。
  • lightsource: 当 shadeTrue 时使用的光源。
  • cmap: Colormap: 如 'viridis', 'gist_rainbow' 等。

示例

import matplotlib.pyplot as plt
import numpy as np
#节点的 x, y, z 坐标
xn=
yn=
zn=
#画等高线图
plt.subplot(121)
contr=plt.contour(xn,yn,zn)
plt.clabel(contr) #在等高线图中标出高度数据
#----------#
#画三维表面图
X,Y=np.meshgrid(xn,yn) #构造网格节点
ax=plt.subplot(122, projection='3d')
ax.plot_surface(X, Y, zn, cmap='viridis')

Python — matplotlib.pyplot 绘图模块及常用函数相关推荐

  1. 【pickle】详解python中的pickle模块(常用函数、示例)

    1.序列化.反序列化介绍 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 2.pickle模块说明 python中的pickle模块实现 ...

  2. python绘图实例-Python matplotlib基础绘图函数示例

    原标题:Python matplotlib基础绘图函数示例 Pyplot基础图标函数: 函数 说明 plt.plot(x,y,fmt,-) 绘制一个坐标图 plt.boxplot(data,notch ...

  3. python日历函数_Python—日历函数—日历模块的常用函数,calendar,常见

    Python-日历函数-日历模块的常用函数,calendar,常见 发表时间:2020-07-07 日历函数 calendar模块中提供了非常多的函数来处理年历和日历. 例如:打印2020年7月份的日 ...

  4. python matplotlib.pyplot.xticks() yticks() (设置x或y轴对应显示的标签)

    from matplotlib\pyplot.py def xticks(ticks=None, labels=None, **kwargs):"""Get or set ...

  5. Python Matplotlib 3D绘图详解(汇总)

    Python Matplotlib 3D绘图详解(汇总) 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为 ...

  6. python中的绘图模块turtle的使用

    python中的绘图模块turtle的使用(7-20190125) 文章目录: 还是从一个有趣的小应用开始,turtle的骚操作吧 最近小猪配齐比较流行,下面用turtle绘制一个粉红色的小猪猪吧-- ...

  7. python中调用什么模块的什么函数来实现求实数平方根_python语言基础与应用答案...

    python语言基础与应用答案 python3不再区分整数和长整数,统一为()类型. python可以使用(____)函数打开文件,这个函数默认的打开模式为(____). a=[3]alist=[1, ...

  8. Python:matplotlib pyplot库函数 savefig所支持的格式以及图片插入word保存后模糊的完美解决方法

    Python:matplotlib pyplot库函数 savefig所支持的格式以及图片插入word保存后模糊的完美解决方法 202012月更新 savefig支持的格式 图片插入word,保存后不 ...

  9. Matplotlib.pyplot绘图讲解

    Matplotlib.pyplot绘图讲解 matplotlib是基础绘图包,上手比较简单,本文主要是针对之前已经学过的进行一次温习,后面要转战pycharts,比较粗糙,想看具体的可以参考下面两篇文 ...

最新文章

  1. 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...
  2. Python 技术篇-httpClient库连接服务器发送请求解析响应实例演示,No module named ‘httplib‘问题解决方法
  3. java面试怎样成功率高一些_java初学者参加面试怎样提高成功率?
  4. C/C++语言链表的排序与查找定位
  5. 正则表达式 运算 常见
  6. Android与Js进行交互
  7. 洛谷 P1136 迎接仪式 解题报告
  8. 在Silverlight中使用ESFramework-- ESFramework 4.0 快速上手(05)
  9. 获取当前元素是第几个点击值
  10. python pil 模块将随机字符生成验证码
  11. masql redis
  12. 如果延迟退休势在必行,区块链如何助力“养老助老”?
  13. 如何在Chrome(或任何浏览器)中编辑任何网页
  14. [并查集]BZOJ 1050——[HAOI2006]旅行comf
  15. 企业信用资质等级证书的办理流程
  16. C语言练习题的错题集
  17. 多线程使用场景及总结
  18. java web应用实现扫码枪获取信息
  19. [GIS算法] 矢量(数组基础、编程基础)
  20. 梦想世界 2014年8月14日服务器维护公告,《命运之轮》停止运营公告

热门文章

  1. 2022-2028全球复杂的可编程逻辑器件行业调研及趋势分析报告
  2. 视频会议常用的四种网络协议方式
  3. 【Verilog基础】【总线协议】AHB BURST传输可以提前终止吗?
  4. deepinv2 添加打印机_Deepin环境下Brother 打印机网络打印驱动安装步骤的图解
  5. 计算机作业微波炉工作的原理,微波炉的工作原理和原理图解析
  6. 用vue3+vant4开发的简单小众电商购物项目模板(纯前端)
  7. 域名批量查询 域名批量查询工具
  8. android仿抽屉动画效果,Android之仿哔哩哔哩客户端首页+抽屉式导航
  9. python语言程序设计(MOOC 嵩天)第六章 程序整理(0225)
  10. pd数据流图怎么画_数据流图(DFD)画法