=======================
The Lifecycle of a Plot
=======================
本教程旨在使用Matplotlib显示单个可视化的入门、灵活使用和提升。我们将从一些原始数据开始,最后保存一个自定义可视化的图形。在此过程中,我们将尝试使用Matplotlib突出显示一些小巧而优雅的特性和最佳实践。
应用模块::matplotlib
本教程基于Chris Moffitt的“这篇优秀的博客文章
关于面向对象API与Pyplot的比较
========================
Matplotlib有两个接口:
第一个是面向对象(OO)接口。在本例中,我们使用一个实例:class:axes.Axes
来呈现实例 class:figure.Figure
的可视化效果。
第二种是基于MATLAB,使用基于状态的接口。它封装在.pyplot
模块中。
大多数术语都是简洁明了的,需要记住的主要事情是:
图形是可能包含一个或多个Axes的最终图像。
Axes代表一个单独的绘图(不要将其与“axis”一词混淆,后者指的是绘图的x/y轴)。
我们调用直接从Axes进行绘图的方法,这种方法使我们在自定义绘图时具有更大的灵活性和功能。
需要注意的是,一般来说,尝试在pyplot接口上使用面向对象接口。
我们的数据
========
我们将使用本教程的源文章中的数据,它包含许多公司的销售信息。
# sphinx_gallery_thumbnail_number = 10
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
data = {'Barton LLC': 109438.50,
'Frami, Hills and Schmidt': 103569.59,
'Fritsch, Russel and Anderson': 112214.71,
'Jerde-Hilpert': 112591.43,
'Keeling LLC': 100934.30,
'Koepp Ltd': 103660.54,
'Kulas Inc': 137351.96,
'Trantow-Barrows': 123381.38,
'White-Trantow': 135841.99,
'Will LLC': 104437.60}
group_data = list(data.values())
group_names = list(data.keys())
group_mean = np.mean(group_data)
入门
===============
该数据自然地可视化为一个柱形图,每个分组。为了使用面向对象的方法实现这一点,我们将首先生成实例:class:figure.Figure
and# :class:axes.Axes
。这个图形就像一个画布,Axes是画布的一部分,我们将在上面进行特定的可视化。
fig, ax = plt.subplots()
现在我们有了一个Axes实例,我们可以在它上面绘图。
fig, ax = plt.subplots()
ax.barh(group_names, group_data)
控制样式
=====================
Matplotlib中有许多样式可供使用,以便根据需要调整可视化效果。要查看样式列表,可以使用:mod:.style
。
print(plt.style.available)
可以使用以下命令激活样式:
plt.style.use('fivethirtyeight')
现在让我们重新制作上面的绘图,看看它看起来什么样:
# sphinx_gallery_thumbnail_number = 10
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
data = {'Barton LLC': 109438.50,
'Frami, Hills and Schmidt': 103569.59,
'Fritsch, Russel and Anderson': 112214.71,
'Jerde-Hilpert': 112591.43,
'Keeling LLC': 100934.30,
'Koepp Ltd': 103660.54,
'Kulas Inc': 137351.96,
'Trantow-Barrows': 123381.38,
'White-Trantow': 135841.99,
'Will LLC': 104437.60}
group_data = list(data.values())
group_names = list(data.keys())
group_mean = np.mean(group_data)
fig, ax = plt.subplots()
fig, ax = plt.subplots()
ax.barh(group_names, group_data)
plt.show()
样式可以控制,如颜色、线宽、背景等很多因素。
自定义绘图
====================
现在我们有了一个我们想要的总体外观的绘图,所以让我们对它进行微调,以便它可以印刷。首先,让我们旋转 x轴上的标签,使它们更清晰地显示出来。我们可以使用以下方法访问这些标签:meth:axes.axes.get\xticklabels
fig, ax = plt.subplots()
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
如果我们想同时设置许多项的属性,那么可以使用:pyplot.setp
函数,这将接收一个或多个Matplotlib对象的列表(或多个列表),并尝试设置每个对象的一些样式元素。
fig, ax = plt.subplots()
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')