Matplotlib 线条样式

Beginner

This tutorial is from open-source community. Access the source code

简介

Matplotlib 是一款功能强大的 Python 数据可视化工具。它的特性之一是能够为图表创建自定义线条样式。在本实验中,我们将学习如何在 Matplotlib 中创建和使用不同的线条样式。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入所需库

要使用 Matplotlib,我们首先需要导入该库。我们还将导入 NumPy 库,以便为我们的图表生成一些示例数据。

import matplotlib.pyplot as plt
import numpy as np

定义线条样式

在 Matplotlib 中有多种定义线条样式的方法。我们可以使用预定义的样式,如'solid'(实线)、'dashed'(虚线)、'dotted'(点线)和'dashdot'(点划线)。我们也可以使用破折号元组来定义自定义线条样式。

linestyle_str = [
     ('solid','solid'),      ## 与 (0, ()) 或'-'相同
     ('dotted', 'dotted'),    ## 与 (0, (1, 1)) 或':'相同
     ('dashed', 'dashed'),    ## 与'--'相同
     ('dashdot', 'dashdot')]  ## 与'-.'相同

linestyle_tuple = [
     ('loosely dotted',        (0, (1, 10))),
     ('dotted',                (0, (1, 1))),
     ('densely dotted',        (0, (1, 1))),
     ('long dash with offset', (5, (10, 3))),
     ('loosely dashed',        (0, (5, 10))),
     ('dashed',                (0, (5, 5))),
     ('densely dashed',        (0, (5, 1))),

     ('loosely dashdotted',    (0, (3, 10, 1, 10))),
     ('dashdotted',            (0, (3, 5, 1, 5))),
     ('densely dashdotted',    (0, (3, 1, 1, 1))),

     ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
     ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
     ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))]

创建一个用于绘制线条样式的函数

我们可以创建一个函数来绘制不同的线条样式。该函数将一个轴对象、一个线条样式列表和一个标题作为输入参数。

def plot_linestyles(ax, linestyles, title):
    X, Y = np.linspace(0, 100, 10), np.zeros(10)
    yticklabels = []

    for i, (name, linestyle) in enumerate(linestyles):
        ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')
        yticklabels.append(name)

    ax.set_title(title)
    ax.set(ylim=(-0.5, len(linestyles)-0.5),
           yticks=np.arange(len(linestyles)),
           yticklabels=yticklabels)
    ax.tick_params(left=False, bottom=False, labelbottom=False)
    ax.spines[:].set_visible(False)

    for i, (name, linestyle) in enumerate(linestyles):
        ax.annotate(repr(linestyle),
                    xy=(0.0, i), xycoords=ax.get_yaxis_transform(),
                    xytext=(-6, -12), textcoords='offset points',
                    color="blue", fontsize=8, ha="right", family="monospace")

创建图表

我们可以通过为每组线条样式调用 plot_linestyles 函数来创建图表。

fig, (ax0, ax1) = plt.subplots(2, 1, figsize=(10, 8), height_ratios=[1, 3])

plot_linestyles(ax0, linestyle_str[::-1], title='Named linestyles')
plot_linestyles(ax1, linestyle_tuple[::-1], title='Parametrized linestyles')

plt.tight_layout()
plt.show()

解读图表

生成的图表展示了不同的线条样式。上面的图表展示了命名线条样式,而下面的图表展示了参数化线条样式。右侧的注释显示了用于每种线条样式的破折号元组。

总结

在本实验中,我们学习了如何在 Matplotlib 中创建和使用不同的线条样式。我们使用预定义样式和破折号元组定义了线条样式。我们还创建了一个函数来绘制不同的线条样式,并解读了生成的图表。