编写文档#

开始#

通用文件结构#

所有文档均从 doc/ 构建. doc/ 目录包含 Sphinx 的配置文件和 reStructuredText (ReST; .rst ) 文件,这些文件呈现为文档页面.

文档通过三种方式创建.首先,API 文档 ( doc/api ) 由 Sphinx 从 Matplotlib 库中的类的文档字符串创建.除了 doc/api/api_changes/ , doc/api 中的 .rst 文件在构建文档时创建.参见下面的 编写文档字符串 .

第二,我们的示例页面,教程以及部分叙述性文档是由 Sphinx Gallery 创建的. Sphinx Gallery 将 Python 示例文件转换为 *.rst 文件,并将 Matplotlib 绘图调用的结果作为嵌入图像.请参阅下面的 编写例子和教程 .

第三,Matplotlib 在 doc/users/ 的子目录中,拥有用 ReST 编写的叙述性文档.如果您想添加适合 .rst 文件而不是画廊或教程示例的新文档,请选择一个合适的子目录将其放入,并将该文件添加到该子目录的 index.rst 的目录中.请参阅下面的 编写 ReST 页面 .

备注

不要直接编辑 doc/plot_types , doc/gallery , doc/tutorialsdoc/api 中的 .rst 文件( doc/api/api_changes/ 除外). Sphinx 在构建文档时会重新生成这些目录中的文件.

设置构建#

Matplotlib 的文档是使用 Sphinx 文档生成工具从 reStructuredText (ReST) 生成的.

要构建文档,您需要 set up Matplotlib for development .请特别注意构建文档所需的 additional dependencies .

构建文档#

文档源文件位于 doc/ 目录中.Sphinx 的配置文件为 doc/conf.py .它控制 Sphinx 解析的目录,文档的构建方式以及扩展的使用方式.要以 html 格式构建文档,请进入 doc/ 并运行:

make html

备注

由于文档非常大,因此首次构建可能需要 10-20 分钟,具体取决于您的机器.后续构建将会更快.

其他有用的调用包括

# Build the html documentation, but skip generation of the gallery images to
# save time.
make html-noplot

# Build the html documentation, but skip specific subdirectories.  If a gallery
# directory is skipped, the gallery images are not generated.  The first
# time this is run, it creates ``.mpl_skip_subdirs.yaml`` which can be edited
# to add or remove subdirectories
make html-skip-subdirs

# Delete built files.  May help if you get errors about missing paths or
# broken links.
make clean

# Build pdf docs.
make latexpdf

默认情况下, SPHINXOPTS 变量设置为 -W --keep-going 以构建完整的文档,但如果存在警告,则以退出状态 1 退出.要取消设置,请使用

make SPHINXOPTS= html

您可以使用 O 变量设置其他选项:

  • make O=-j4 html 使用 4 个进程运行并行构建.

  • make O=-Dplot_formats=png:100 html 以低分辨率保存图形.

可以组合多个选项,例如 make O='-j4 -Dplot_formats=png:100' html .

在 Windows 上,将选项设置为环境变量,例如:

set SPHINXOPTS= & set O=-j4 -Dplot_formats=png:100 & make html

显示本地构建的文档#

构建的文档位于 build/html 文件夹中.在默认浏览器中打开它们的快捷方式是:

make show

编写 ReST 页面#

大多数文档都在各个类和方法的文档字符串中,显式的 .rst 文件中,或者在示例和教程中.所有这些都使用 ReST 语法,并由 Sphinx 处理.

Sphinx reStructuredText Primer 》 是使用 ReST 的一个很好的入门指南.更多完整信息可在《 reStructuredText reference documentation 》中找到.

本节包含有关如何在 Matplotlib 文档中使用 ReST 的其他信息和约定.

格式和样式约定#

努力保持 Matplotlib 文档的一致性是很有用的.以下是一些常用的格式和样式约定.

章节格式#

对章节标题使用 sentence case Upper lower ,例如, Possible hangups 而不是 Possible Hangups .

我们的目标是遵循 Python documentationSphinx reStructuredText documentation 中关于章节标记字符的建议,即:

  • # 带上划线,用于 parts.这保留给 index.rst 中的主标题.所有其他页面应以"chapter"或更低级别开始.

  • * 带上划线,用于 chapters

  • = ,用于 sections

  • - ,用于 subsections

  • ^ ,用于 subsubsections

  • " ,用于 paragraphs

这可能尚未在现有文档中得到一致的应用.

表格格式#

鉴于表格的大小和每个条目的长度,请使用:

小表格

大表格

短条目

simple or grid table

grid table

长条目

list table

csv table

更多信息请参考 rst tables .

函数参数#

docstring 中的函数参数和关键字应该使用 *emphasis* role.这将使 Matplotlib 的文档与 Python 的文档保持一致:

Here is a description of *argument*

不要使用 ` default role `:

Do not describe `argument` like this.  As per the next section,
this syntax will (unsuccessfully) attempt to resolve the argument as a
link to a class or method in the library.

也不要使用 `` literal `` role:

Do not describe ``argument`` like this.

引用其他文档和章节#

Sphinx 支持内部引用:

Role

链接目标

在渲染的 HTML 中的表示

:doc:

文档

链接到页面

:ref:

reference label

链接到与标题相关的锚点

例子:

See the :doc:`/install/index`

See the tutorial :ref:`quick_start`

See the example :doc:`/gallery/lines_bars_and_markers/simple_plot`

将渲染为:

请参考 安装

请参考教程 快速入门指南

请参考示例 折线图

章节也可以被赋予 reference labels.例如从 安装 链接:

.. _clean-install:

How to completely remove Matplotlib
===================================

Occasionally, problems with Matplotlib can be solved with a clean...

并使用标准引用语法引用它:

See :ref:`clean-install`

将给出以下链接: 如何完全删除 Matplotlib

为了最大程度地提高章节标签和引用中的内部一致性,请对章节引用使用连字符分隔的描述性标签.请记住,内容可能会在以后重新组织,因此请避免在引用中使用顶级名称(如 userdevelfaq ,除非必要),例如,FAQ "什么是后端?" 以后可能会成为用户指南的一部分,因此标签:

.. _what-is-a-backend:

比这更好:

.. _faq-backend:

此外,由于下划线被 Sphinx 广泛使用,因此请使用连字符分隔单词.

引用其他代码#

要链接到 Matplotlib 中的其他方法,类或模块,可以使用反引号,例如:

`matplotlib.collections.LineCollection`

生成如下链接: matplotlib.collections.LineCollection .

注意:我们使用 sphinx 设置 default_role = 'obj' ,这样您就不必使用 :class: , :func: , :meth: 等限定符.

通常,您不希望显示完整的包和模块名称. 只要目标没有歧义,您就可以简单地省略它们:

`.LineCollection`

并且链接仍然有效: LineCollection .请注意,您通常应该包含前导点.它告诉 Sphinx 在整个项目中查找给定的名称.另请参见 Sphinx: Cross-referencing Python objects 中的解释.

如果存在多个具有相同名称的代码元素(例如, plot() 是多个类中的方法),则必须扩展定义:

`.pyplot.plot` or `.Axes.plot`

这些将显示为 pyplot.plotAxes.plot . 要仍然只显示最后一段,可以添加一个波浪号作为前缀:

`~.pyplot.plot` or `~.Axes.plot`

将渲染为 plotplot .

也可以通过 intersphinx 链接其他包:

`numpy.mean`

将返回此链接: numpy.mean . 这适用于 Python,Numpy,Scipy 和 Pandas(完整列表在 doc/conf.py 中). 如果外部链接失败,您可以使用以下命令检查可引用对象的完整列表:

python -m sphinx.ext.intersphinx 'https://docs.python.org/3/objects.inv'
python -m sphinx.ext.intersphinx 'https://numpy.org/doc/stable/objects.inv'
python -m sphinx.ext.intersphinx 'https://docs.scipy.org/doc/scipy/objects.inv'
python -m sphinx.ext.intersphinx 'https://pandas.pydata.org/pandas-docs/stable/objects.inv'

包含图像和文件#

可以使用 image:: 指令将图像文件直接包含在页面中. 例如, tutorials/intermediate/constrainedlayout_guide.py 显示了几个静态图像:

# .. image:: /_static/constrained_layout_1b.png
#    :align: center

文件可以被逐字包含. 例如, LICENSE 文件使用以下方式包含在 许可协议 中:

.. literalinclude:: ../../LICENSE/LICENSE

示例目录由 sphinx-gallery 复制到 doc/gallery ,因此可以使用以下方式包含示例目录中的图:

.. plot:: gallery/lines_bars_and_markers/simple_plot.py

请注意,引用的是生成绘图的 python 脚本,而不是创建的任何绘图. 构建文档时,Sphinx-gallery 将提供正确的引用.

用于编写数学表达式的工具#

在大多数情况下,您可能想使用 Sphinx's builtin Math extensions 之一. 在极少数情况下,我们希望文档 html 中数学文本的渲染与 Matplotlib 图形中数学表达式的渲染完全匹配. 在这些情况下,您可以使用 matplotlib.sphinxext.mathmpl Sphinx 扩展(另请参见 书写数学表达式 教程.)

编写文档字符串#

大多数 API 文档都是使用文档字符串编写的.这些是源代码中的注释块,用于解释代码的工作原理.

备注

文档的某些部分尚未符合当前的文档风格. 如果有疑问,请遵循此处给出的规则,而不是您在源代码中看到的内容. 非常欢迎提交修改文档字符串以符合当前风格的 pull request.

所有新的或编辑过的文档字符串都应符合 numpydoc docstring guide . 上面讨论的许多 ReST 语法 (参见 编写 ReST 页面 ) 可用于链接和引用. 这些文档字符串最终会填充 doc/api 目录,并形成库的参考文档.

文档字符串示例#

一个文档字符串的示例如下:

def hlines(self, y, xmin, xmax, colors=None, linestyles='solid',
           label='', **kwargs):
    """
    Plot horizontal lines at each *y* from *xmin* to *xmax*.

    Parameters
    ----------
    y : float or array-like
        y-indexes where to plot the lines.

    xmin, xmax : float or array-like
        Respective beginning and end of each line. If scalars are
        provided, all lines will have the same length.

    colors : list of colors, default: :rc:`lines.color`

    linestyles : {'solid', 'dashed', 'dashdot', 'dotted'}, optional

    label : str, default: ''

    Returns
    -------
    `~matplotlib.collections.LineCollection`

    Other Parameters
    ----------------
    data : indexable object, optional
        DATA_PARAMETER_PLACEHOLDER
    **kwargs :  `~matplotlib.collections.LineCollection` properties.

    See Also
    --------
    vlines : vertical lines
    axhline : horizontal line across the Axes
    """

请参阅 hlines 文档,了解其呈现方式.

Sphinx 网站也包含大量关于 ReST 标记和使用 Sphinx 的 documentation .

格式约定#

基本的文档字符串约定在 numpydoc docstring guideSphinx 文档中进行了介绍. 一些需要记住的 Matplotlib 特定的格式约定:

引号位置#

单行文档字符串的引号位于同一行 (pydocstyle D200):

def get_linewidth(self):
    """Return the line width in points."""

多行文档字符串的引号位于不同的行 (pydocstyle D213):

def set_linestyle(self, ls):
"""
Set the linestyle of the line.

[...]
"""

函数参数#

docstring 中的函数参数和关键字应该使用 *emphasis* role.这将使 Matplotlib 的文档与 Python 的文档保持一致:

If *linestyles* is *None*, the default is 'solid'.

不要使用 ` default role ` 或 `` literal `` role:

Neither `argument` nor ``argument`` should be used.

字符串的引号#

Matplotlib 没有关于使用单引号还是双引号的约定. 当前代码中两者都有混合使用.

在给出字符串值时,请使用简单的单引号或双引号,例如:

If 'tight', try to figure out the tight bbox of the figure.

No ``'extra'`` literal quotes.

不鼓励在文本周围使用额外的文字引号. 虽然它们稍微改善了呈现的文档,但它们输入起来很麻烦,并且在纯文本文档中难以阅读.

参数类型描述#

参数类型描述的主要目标是可读且易于理解.如果可能的类型过于复杂,请使用简化的类型描述,并在文本中更精确地解释该类型.

通常,适用 numpydoc docstring guide 约定. 以下规则在 numpydoc 约定不明确的情况下对其进行扩展.

对于可以是任何数字的类型,请使用 float .

使用 (float, float) 来描述 2D 位置. 应包含括号以使元组性更明显.

对于同类数值序列,可以使用 array-like ,它通常可以是 numpy.array. 可以使用 2D , 3D , n-dimensional 来指定维度. 如果需要使用变量来表示维度的大小,请使用括号中的大写字母 ( (M, N) array-like ). 在文本中引用它们时,它们更容易阅读,并且不需要特殊的格式. 如果返回的对象确实是一个 numpy 数组,则对于返回类型,请使用 array 而不是 array-like .

float 是类似数组的隐式默认 dtype. 对于其他 dtypes,请使用 array-like of int .

一些可能的用法:

2D array-like
(N,) array-like
(M, N) array-like
(M, N, 3) array-like
array-like of int

非数值同类序列描述为列表,例如:

list of str
list of `.Artist`

引用类型#

通常,适用于 referring-to-other-code 中的规则. 更具体地说:

在参数类型中使用带缩写波浪号的完整引用` ~matplotlib.colors.Normalize 虽然完整名称有助于纯文本文档的阅读者,但 HTML 不需要显示完整名称,因为它会链接到它. 因此, ``~` -缩短使其更具可读性.

在文本中使用缩写链接` .Normalize `.

norm : `~matplotlib.colors.Normalize`, optional
     A `.Normalize` instance is used to scale luminance data to 0, 1.

默认值#

与 numpydoc 指南相反,如果参数具有简单的默认值,则无需将其标记为可选:

  • 尽可能使用 {name} : {type}, default: {val} .

  • 如果无法以建议的方式充分解释默认值,请使用 {name} : {type}, optional 并在文本中描述默认值.

默认值应提供针对人类读者的语义信息. 在简单的情况下,它在函数签名中重述该值. 如果适用,应添加单位.

Prefer:
    interval : int, default: 1000ms
over:
    interval : int, default: 1000

如果 None 仅用作"未指定参数"的哨兵值,请不要将其记录为默认值. 根据上下文,给出实际的默认值,或者如果未指定没有任何特定效果,则将参数标记为可选.

Prefer:
    dpi : float, default: :rc:`figure.dpi`
over:
    dpi : float, default: None

Prefer:
    textprops : dict, optional
        Dictionary of keyword parameters to be passed to the
        `~matplotlib.text.Text` instance contained inside TextArea.
over:
    textprops : dict, default: None
        Dictionary of keyword parameters to be passed to the
        `~matplotlib.text.Text` instance contained inside TextArea.

参见 部分#

Sphinx 会自动链接 参见 部分的定义块中的代码元素.无需在那里使用反引号:

See Also
--------
vlines : vertical lines
axhline : horizontal line across the Axes

换行参数列表#

过长的参数列表应该使用 \ 进行换行,并且在新的一行开头不要有任何缩进(没有缩进是因为 pydoc 会解析 docstring 并去除行继续符,因此缩进会导致行内出现大量的空白):

def add_axes(self, *args, **kwargs):
    """
    ...

    Parameters
    ----------
    projection : {'aitoff', 'hammer', 'lambert', 'mollweide', 'polar', \
'rectilinear'}, optional
        The projection type of the axes.

    ...
    """

或者,你可以在 docstring 的专用部分描述有效的参数值.

rcParams#

rcParams can be referenced with the custom :rc: role: :rc:`foo` yields rcParams["foo"] = 'default', which is a link to the matplotlibrc file description.

设置器和获取器#

Artist 属性是通过设置器和获取器方法实现的(因为 Matplotlib 早于 Python 的 ` property` 装饰器).按照惯例,这些设置器和获取器被命名为 set_PROPERTYNAMEget_PROPERTYNAME ;因此在 artist 上定义的属性列表及其值可以通过 setpgetp 函数列出.

属性设置器方法的 Parameters 块被解析以记录接受的值,例如 Line2D.set_linestyle 的 docstring 以

def set_linestyle(self, ls):
    """
    Set the linestyle of the line.

    Parameters
    ----------
    ls : {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
        etc.
    """

开头, 这导致在 plt.setp(line)plt.setp(line, "linestyle") 的输出中产生以下行:

linestyle or ls: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}

在一些罕见的情况下(主要是,接受单个元组和解包元组的设置器),接受的值不能以这种方式记录;在这种情况下,它们可以记录为 .. ACCEPTS: 块,例如对于 axes.Axes.set_xlim :

def set_xlim(self, left=None, right=None):
    """
    Set the x-axis view limits.

    Parameters
    ----------
    left : float, optional
        The left xlim in data coordinates. Passing *None* leaves the
        limit unchanged.

        The left and right xlims may also be passed as the tuple
        (*left*, *right*) as the first positional argument (or as
        the *left* keyword argument).

        .. ACCEPTS: (bottom: float, top: float)

    right : float, optional
        etc.
    """

注意,前导的 .. 使 .. ACCEPTS: 块成为 reST 注释,将其从呈现的文档中隐藏.

关键字参数#

备注

本节中的信息正在被开发团队积极讨论,因此仅在必要时使用 docstring 插值.本节暂时保留,因为此插值是现有文档的一部分.

由于 Matplotlib 使用了大量的传递性 kwargs ,例如,在每个创建行的函数( plot , semilogx , semilogy 等)中,新用户很难知道哪些 kwargs 是支持的.Matplotlib 使用 docstring 插值方案来支持记录每个接受 *kwargs 的函数.要求是:

  1. 单点配置,因此属性的更改不需要编辑多个 docstring.

  2. 尽可能自动化,以便随着属性的变化,文档自动更新.

@_docstring.interpd 装饰器实现了这一点.任何接受 Line2D 传递性 kwargs 的函数,例如 matplotlib.axes.Axes.plot ,都可以列出 Line2D 属性的摘要,如下所示:

# in axes.py
@_docstring.interpd
def plot(self, *args, **kwargs):
    """
    Some stuff omitted

    Other Parameters
    ----------------
    scalex, scaley : bool, default: True
        These parameters determine if the view limits are adapted to the
        data limits. The values are passed on to `autoscale_view`.

    **kwargs : `.Line2D` properties, optional
        *kwargs* are used to specify properties like a line label (for
        auto legends), linewidth, antialiasing, marker face color.
        Example::

        >>> plot([1, 2, 3], [1, 2, 3], 'go-', label='line 1', linewidth=2)
        >>> plot([1, 2, 3], [1, 4, 9], 'rs', label='line 2')

        If you specify multiple lines with one plot call, the kwargs apply
        to all those lines. In case the label object is iterable, each
        element is used as labels for each set of data.

        Here is a list of available `.Line2D` properties:

        %(Line2D:kwdoc)s
    """

%(Line2D:kwdoc) 语法使 interpd 查找名为 Line2DArtist 子类,并在该类上调用 artist.kwdoc . artist.kwdoc 内省子类并将其属性总结为子字符串,该子字符串被插入到 docstring 中.

请注意,此方案不适用于装饰 Artist 的 __init__ ,因为子类及其属性在该点尚未定义.相反, @_docstring.interpd 可以用于装饰类本身 -- 在那一点, kwdoc 可以列出属性并将它们插入到 __init__.__doc__ 中.

继承 docstring#

如果子类覆盖了一个方法但没有改变语义,我们可以为子类的方法重用父类的 docstring.如果子类方法没有 docstring,Python 会自动执行此操作.

使用纯注释 # docstring inherited 来表示重用父 docstring 的意图. 这样我们就不会在将来意外地创建一个 docstring:

class A:
    def foo():
        """The parent docstring."""
        pass

class B(A):
    def foo():
        # docstring inherited
        pass

添加图片#

如上所述(参见 包含图像和文件 ), examples gallery 中的图片可以通过指向创建该图片的 python 脚本的 .. plot:: 指令引用.例如, legend docstring 引用了文件 examples/text_labels_and_annotations/legend.py :

"""
...

Examples
--------

.. plot:: gallery/text_labels_and_annotations/legend.py
"""

请注意, examples/text_labels_and_annotations/legend.py 已被映射到 gallery/text_labels_and_annotations/legend.py ,这种重定向可能会在未来对文档进行重组时得到修复.

绘图也可以直接放在文档字符串中. 详情请参见 /api/sphinxext_plot_directive_api . 一个简短的例子是:

"""
...

Examples
--------

.. plot::
   import matplotlib.image as mpimg
   img = mpimg.imread('_static/stinkbug.png')
   imgplot = plt.imshow(img)
"""

与引用示例脚本相比,这种风格的优势在于代码也会出现在交互式文档字符串中.

编写例子和教程#

例子和教程是 Python 脚本,由 Sphinx Gallery 运行. Sphinx Gallery 在源目录中查找 *.py 文件,并运行这些文件以创建图像和叙述,嵌入到 doc/ 目录的构建位置的 *.rst 文件中. 构建位置中的文件不应直接编辑,因为它们将被 Sphinx gallery 覆盖. 目前,Matplotlib 有四个图库,如下所示:

源位置

构建位置

galleries/plot_types

doc/plot_types

galleries/examples

doc/gallery

galleries/tutorials

doc/tutorials

galleries/users_explain

doc/users/explain

前三个是传统的图库. 最后一个 galleries/users_explain 是一个混合图库,其中一些文件是原始的 *.rst 文件,而一些是 *.py 文件; Sphinx Gallery 只是将这些 *.rst 文件从源位置复制到构建位置(参见 图库中的原始重构文本文件 ,如下所示).

在 Python 文件中,要排除某个例子生成绘图,请在文件名中的某个位置插入 "sgskip".

这些文件的格式相对简单. 格式正确的注释块被视为 ReST 文本,代码被显示,图形被放入构建的页面中. Matplotlib 使用 # %% 分节符,以便 IDE 识别 "代码单元",从而方便重新运行示例的子节.

例如, 折线图 示例是从 /galleries/examples/lines_bars_and_markers/simple_plot.py 生成的,其内容如下:

"""
===========
Simple Plot
===========

Create a simple plot.
"""
import matplotlib.pyplot as plt
import numpy as np

# Data for plotting
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

# Note that using plt.subplots below is equivalent to using
# fig = plt.figure and then ax = fig.add_subplot(111)
fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='time (s)', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()
plt.show()

第一个注释块被视为 ReST 文本. 其他注释块在 折线图 中呈现为注释.

教程的制作机制与此完全相同,只是它们更长,并且通常有多于一个注释块(即 快速入门指南 ). 第一个注释块可以与上面的示例相同. 后续的 ReST 文本块由行 # %% 分隔:

"""
===========
Simple Plot
===========

Create a simple plot.
"""
...
ax.grid()
plt.show()

# %%
# Second plot
# ===========
#
# This is a second plot that is very nice

fig, ax = plt.subplots()
ax.plot(np.sin(range(50)))

通过这种方式,文本,代码和图形以"notebook"风格输出.

示例数据#

当示例数据来自公共数据集时,请引用数据来源. 示例数据应该在代码中写出. 如果这不可行,可以使用 cbook.get_sample_data 加载数据.

import matplotlib.cbook as cbook
fh = cbook.get_sample_data('mydata.dat')

如果数据太大而无法包含在代码中,则应将其添加到 lib/matplotlib/mpl-data/sample_data/

排序例子#

教程示例 的章节顺序,以及每个章节中示例的顺序,是通过 /doc/sphinxext/gallery_order.py 中的两步过程确定的:

  • 显式顺序:此文件包含一个用于章节顺序的文件夹列表和一个用于小节顺序的示例列表. 文档页面中显示的项目顺序是这些项目中在这些列表中出现的顺序.

  • 隐式顺序:如果文件夹或示例不在这些列表中,它将被附加到显式排序的项目之后,并且所有这些附加项目将按路径名(对于章节)或按文件名(对于小节)排序.

因此,如果希望示例出现在图库中的特定位置,请使用你的示例扩展这些列表. 如果不需要或没有明确的顺序,仍请确保命名示例时保持一致,即使用示例的主要功能或主题作为文件名的第一个单词; 例如,图像示例的理想命名应类似于 imshow_mynewexample.py .

示例指南#

示例图库包含 matplotlib 功能的可视化演示. 图库示例的存在是为了让用户可以浏览视觉示例. 与教程或用户指南不同,图库示例通过演示进行教学,而不是通过解释或指导.

图库示例应包含对所演示内容的简短描述,并在相关时,说明如何实现. 解释应简洁,仅提供理解示例所需的最小上下文. 交叉链接相关文档(例如,教程,用户指南和 API 条目),并使用相关概念标记示例.

格式#

所有 示例 都应力求遵循以下准则:

标题:

用简短的句子(大约 1-6 个单词)描述内容. 不要使用 demo,因为这在示例中是隐含的. 避免使用隐含的动词,如 create,make 等,例如,annotated heatmaps 优先于 create annotated heatmaps. 当必须使用动词时,使用一般现在时,例如 Fill the area between two curves

描述:

在简短的段落(大约 1-3 个句子)中,描述正在演示的可视化技术,以及如何使用库功能来执行该技术,例如 Set bar color and bar label entries using the color and label parameters of ~Axes.bar

绘图:

清楚地展示主题,并在可能的情况下,展示边缘情况和不同的应用. 虽然绘图应该在视觉上吸引人,但优先考虑保持绘图的简洁.

代码:

编写展示示例重点功能所需的最小代码. 避免自定义样式和注释(标题,图例,颜色等),如果它不会提高示例的清晰度.

谨慎地使用简短的注释来描述代码中难以理解的部分. 当需要更多上下文或解释时,在代码示例之前添加一个文本段落.

识别艺术家对象是否相交 演示了视觉示例的要点. 这个例子很"乱",很难分类,但图库是它合适的展示位置,因为它可以通过视觉搜索找到.

交互式调整颜色映射范围 是一个很好的描述性标题的示例,它简要概述了如何使用展示的库功能来实现演示的可视化技术.

带有刻度路径效果的线条 是一个拥有展示该功能所需的最小代码量的示例. 缺少无关的代码使读者更容易将代码的哪些部分对应到绘图的哪些部分.

图形大小#

在自定义图形大小时,我们的目标是避免在渲染的 HTML 文档中进行缩小. 当前的宽度限制(由 pydata-sphinx-theme 引起)是 720px,即 figsize=(7.2, ...) ,如果页面没有子节,因此在右侧没有"On this page"导航,则为 896px.

其他#

移动文档#

有时需要移动或合并文档.如果不采取任何措施,将导致链接失效 (404) 或指向旧版本的文档.比较好的做法是用一个HTML刷新页面替换旧页面,立即将观看者重定向到新页面.例如,我们将 /doc/topic/old_info.rst 移动到 /doc/topic/new_info.rst .我们删除 /doc/topic/old_info.rst ,并在 /doc/topic/new_info.rst 中插入一个 redirect-from 指令,告诉sphinx仍然制作带有HTML刷新/重定向的旧文件(可能在文件的顶部附近,使其引人注目)

.. redirect-from:: /topic/old_info

在构建的文档中,这将产生一个HTML文件 /build/html/topic/old_info.html ,它具有到 new_info.html 的刷新.如果这两个文件位于不同的子目录中:

.. redirect-from:: /old_topic/old_info2

将产生一个HTML文件 /build/html/old_topic/old_info2.html ,它具有到 ../topic/new_info.html 的(相对)刷新.

对此指令使用完整路径,相对于 https://matplotlib.org/stable/ 处的文档根目录.因此,用户可以通过 http://matplotlib.org/stable/old_topic/old_info2 找到 /old_topic/old_info2 .为了清楚起见,请勿使用相对链接.

生成继承关系图#

可以使用Sphinx的 inheritance-diagram 指令生成类继承关系图.

示例:

.. inheritance-diagram:: matplotlib.patches matplotlib.lines matplotlib.text
   :parts: 2

Inheritance diagram of matplotlib.patches, matplotlib.lines, matplotlib.text