=======================
    The Lifecycle of a Plot
    =======================
    本教程旨在使用Matplotlib显示单个可视化的入门、灵活使用和提升。我们将从一些原始数据开始,最后保存一个自定义可视化的图形。在此过程中,我们将尝试使用Matplotlib突出显示一些小巧而优雅的特性和最佳实践。
    应用模块::matplotlib
    本教程基于Chris Moffitt的“这篇优秀的博客文章”。它被Chris Holdgraf转换成了matplotlib官方教程,又被武汉理工大学赵广辉教授整理、解析为本教程。

    关于面向对象API与Pyplot的比较
    ========================
    Matplotlib有两个接口:
    第一个是面向对象(OO)接口。在本例中,我们使用一个实例:class:axes.Axes 来呈现实例 class:figure.Figure 的可视化效果。
    第二种是基于MATLAB,使用基于状态的接口。它封装在.pyplot模块中。

    大多数术语都是简洁明了的,需要记住的主要事情是:
    图形是可能包含一个或多个Axes的最终图像。
    Axes代表一个单独的绘图(不要将其与“axis”一词混淆,后者指的是绘图的x/y轴)。

    我们调用直接从Axes进行绘图的方法,这种方法使我们在自定义绘图时具有更大的灵活性和功能。
    需要注意的是,一般来说,尝试在pyplot接口上使用面向对象接口。

    我们的数据

    ========
    我们将使用本教程的源文章中的数据,它包含许多公司的销售信息。

    1. # sphinx_gallery_thumbnail_number = 10
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. from matplotlib.ticker import FuncFormatter
    5. data = {'Barton LLC': 109438.50,
    6. 'Frami, Hills and Schmidt': 103569.59,
    7. 'Fritsch, Russel and Anderson': 112214.71,
    8. 'Jerde-Hilpert': 112591.43,
    9. 'Keeling LLC': 100934.30,
    10. 'Koepp Ltd': 103660.54,
    11. 'Kulas Inc': 137351.96,
    12. 'Trantow-Barrows': 123381.38,
    13. 'White-Trantow': 135841.99,
    14. 'Will LLC': 104437.60}
    15. group_data = list(data.values())
    16. group_names = list(data.keys())
    17. group_mean = np.mean(group_data)

    入门
    ===============

    该数据自然地可视化为一个柱形图,每个分组。为了使用面向对象的方法实现这一点,我们将首先生成实例:class:figure.Figure and# :class:axes.Axes。这个图形就像一个画布,Axes是画布的一部分,我们将在上面进行特定的可视化。

    1. fig, ax = plt.subplots()

    现在我们有了一个Axes实例,我们可以在它上面绘图。

    1. fig, ax = plt.subplots()
    2. ax.barh(group_names, group_data)

    控制样式

    =====================
    Matplotlib中有许多样式可供使用,以便根据需要调整可视化效果。要查看样式列表,可以使用:mod:.style

    1. print(plt.style.available)

    可以使用以下命令激活样式:

    1. plt.style.use('fivethirtyeight')

    现在让我们重新制作上面的绘图,看看它看起来什么样:

    1. # sphinx_gallery_thumbnail_number = 10
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. from matplotlib.ticker import FuncFormatter
    5. data = {'Barton LLC': 109438.50,
    6. 'Frami, Hills and Schmidt': 103569.59,
    7. 'Fritsch, Russel and Anderson': 112214.71,
    8. 'Jerde-Hilpert': 112591.43,
    9. 'Keeling LLC': 100934.30,
    10. 'Koepp Ltd': 103660.54,
    11. 'Kulas Inc': 137351.96,
    12. 'Trantow-Barrows': 123381.38,
    13. 'White-Trantow': 135841.99,
    14. 'Will LLC': 104437.60}
    15. group_data = list(data.values())
    16. group_names = list(data.keys())
    17. group_mean = np.mean(group_data)
    18. fig, ax = plt.subplots()
    19. fig, ax = plt.subplots()
    20. ax.barh(group_names, group_data)
    21. plt.show()

    image.png
    样式可以控制,如颜色、线宽、背景等很多因素。

    自定义绘图

    ====================
    现在我们有了一个我们想要的总体外观的绘图,所以让我们对它进行微调,以便它可以印刷。首先,让我们旋转 x轴上的标签,使它们更清晰地显示出来。我们可以使用以下方法访问这些标签:meth:axes.axes.get\xticklabels

    1. fig, ax = plt.subplots()
    2. ax.barh(group_names, group_data)
    3. labels = ax.get_xticklabels()

    如果我们想同时设置许多项的属性,那么可以使用:pyplot.setp函数,这将接收一个或多个Matplotlib对象的列表(或多个列表),并尝试设置每个对象的一些样式元素。

    1. fig, ax = plt.subplots()
    2. ax.barh(group_names, group_data)
    3. labels = ax.get_xticklabels()
    4. plt.setp(labels, rotation=45, horizontalalignment='right')