天天看点

利用python进行数据分析--绘图和可视化matplotlibmatplotlib API入门

与公众号同步更新,详细内容及相关ipynb文件在公众号中,公众号:AI入门小白

文章目录

  • matplotlib API入门
    • Figure和Subplot
    • 调整subplot周围的间距
    • 颜⾊、标记和线型
    • 设置标题、轴标签、刻度以及刻度标签
    • 添加图例
    • 使用rc配置默认属性
    • 绘制各类图形

信息可视化(也叫绘图)是数据分析中最重要的⼯作之⼀。它可能是探索过程的⼀部分,例如,帮助我们找出异常值、必要的数据转换、得出有关模型的

idea

等。另外,做⼀个可交互的数据可视化也许是⼯作的最终⽬标。Python有许多库进⾏静态或动态的数据可视化,但我这⾥重要关注于

matplotlib

(http://matplotlib.org/ )和基于它的库。

matplotlib

衍⽣出了多个数据可视化的⼯具集,它们使⽤

matplotlib

作为底层。其中之⼀是

seaborn

(http://seaborn.pydata.org/ )。

matplotlib API入门

matplotlib

的通常约定是:

import matplotlib.pyplot as plt
%matplotlib notebook  # 用于在notebook中进行交互式绘图
           

Jupyter

中运⾏

%matplotlib notebook

(或在

IPython

中运⾏

%matplotlib

),就可以创建⼀个简单的图形。

import numpy as np
data = np.arange(10)
data
plt.plot(data)
           

Figure和Subplot

matplotlib

的图像都位于

Figure

对象中。你可以⽤

plt.figure

创建⼀个新的

Figure

如果⽤的是

IPython

,这时会弹出⼀个空窗⼝,但在

Jupyter

中,必须再输⼊更多命令才能看到。

plt.figure

有⼀些选项,特别是

figsize

,它⽤于确保当图⽚保存到磁盘时具有⼀定的⼤⼩和纵横⽐。

不能通过空

Figure

绘图。必须⽤

add_subplot

创建⼀个或多个

subplot

才⾏:

这条代码的意思是:图像应该是2×2的(即最多4张图),且当前选中的是4个

subplot

中的第⼀个(编号从1开始)。

ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
           

提示:使⽤

Jupyter notebook

有⼀点不同,即每个⼩窗重新执⾏后,图形会被重置。因此,对于复杂的图形,你必须将所有的绘图命令存在⼀个⼩窗⾥。

这⾥,我们运⾏同⼀个⼩窗⾥的所有命令:

fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
           

如果这时执⾏⼀条绘图命令(如

plt.plot([1.5, 3.5, -2, 1.6])

),

matplotlib

就会在最后⼀个⽤过的

subplot

(如果没有则创建⼀个)上进⾏绘制,隐藏创建

figure

subplot

的过程。因此,如果我们执⾏下列命令,你就会得到如上图所示的结果:

"k--"

是⼀个线型选项,⽤于告诉

matplotlib

绘制⿊⾊虚线图。上⾯那些由

fig.add_subplot

所返回的对象是

AxesSubplot

对象,直接调⽤它们的实例⽅法就可以在其它空着的格⼦⾥⾯画图了

_ = ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
           

你可以在

matplotlib

的⽂档中找到各种图表类型。创建包含

subplot

⽹格的

figure

是⼀个⾮常常⻅的任务,

matplotlib

有⼀个更为⽅便的⽅法

plt.subplots

,它可以创建⼀个新的

Figure

,并返回⼀个含有已创建的

subplot

对象的

NumPy

数组:

fig, axes = plt.subplots(2, 3)
axes
           

这是⾮常实⽤的,因为可以轻松地对

axes

数组进⾏索引,就好像是⼀个⼆维数组⼀样,例如

axes[0,1]

。你还可以通过

sharex

sharey

指定

subplot

应该具有相同的

X

轴或

Y

轴。在⽐较相同范围的数据时,这也是⾮常实⽤的,否则,

matplotlib

会⾃动缩放各图表的界限。有关该⽅法的更多信息,请参⻅下表:

利用python进行数据分析--绘图和可视化matplotlibmatplotlib API入门

调整subplot周围的间距

默认情况下,

matplotlib

会在

subplot

外围留下⼀定的边距,并在

subplot

之间留下⼀定的间距。间距跟图像的⾼度和宽度有关,因此,如果你调整了图像⼤⼩(不管是编程还是⼿⼯),间距也会⾃动调整。利⽤

Figure

subplots_adjust

⽅法可以轻⽽易举地修改间距,此外,它也是个顶级函数:

plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
                wspace=None, hspace=None)
           

wspace

hspace

⽤于控制宽度和⾼度的百分⽐,可以⽤作

subplot

之间的间距。下⾯是⼀个简单的例⼦,其中我将间距收缩到了0:

fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
    for j in range(2):
        axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)
plt.subplots_adjust(wspace=0, hspace=0)
           

注意:

matplotlib

不会检查标签是否重叠,所以对于这种情况,你只能⾃⼰设定刻度位置和刻度标签。

颜⾊、标记和线型

matplotlib

plot

函数接受⼀组

X

Y

坐标,还可以接受⼀个表示颜⾊和线型的字符串缩写。例如,要根据

x

y

绘制绿⾊虚线,你可以执⾏如下代码:

这种在⼀个字符串中指定颜⾊和线型的⽅式⾮常⽅便。在实际中,如果你是⽤代码绘图,你可能不想通过处理字符串来获得想要的格式。通过下⾯这种更为明确的⽅式也能得到同样的效果:

常⽤的颜⾊可以使⽤颜⾊缩写,你也可以指定颜⾊码(例如,

'#CECECE'

)。你可以通过查看

plot

的⽂档字符串查看所有线型的合集(在

IPython

Jupyter

中使⽤

plot?

)。

线图可以使⽤标记强调数据点。因为

matplotlib

可以创建连续线图,在点之间进⾏插值,因此有时可能不太容易看出真实数据点的位置。标记也可以放到格式字符串中,但标记类型和线型必须放在颜⾊后⾯。

设置标题、轴标签、刻度以及刻度标签

为了说明⾃定义轴,我将创建⼀个简单的图像并绘制⼀段随机漫步:

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(np.random.randn(1000).cumsum())
           

要改变

x

轴刻度,最简单的办法是使⽤

set_xticks

set_xticklabels

。前者告诉

matplotlib

要将刻度放在数据范围中的哪些位置,默认情况下,这些位置也就是刻度标签。但我们可以通过

set_xticklabels

将任何其他的值⽤作标签:

ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
                            rotation=30, fontsize='small')
           

rotation

选项设定

x

刻度标签倾斜30度。最后,再⽤

set_xlabel

X

轴设置⼀个名称,并⽤

set_title

设置⼀个标题(⻅上图的结果):

ax.set_title('My first matplotlib plot')
ax.set_xlabel('stages')
           

Y

轴的修改⽅式与此类似,只需将上述代码中的

x

替换为

y

即可。轴的类有集合⽅法,可以批量设定绘图选项。前⾯的例⼦,也可以写为:

props = {
    'title': 'My first matplotlib plot',
    'xlabel': 'Stages'    }
ax.set(**props)
ax.set_ylabel('world')
           

添加图例

图例(legend)是另⼀种⽤于标识图表元素的重要⼯具。添加图例的⽅式有多种。最简单的是在添加

subplot

的时候传⼊

label

参数:

from numpy.random import randn
fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')
           

在此之后,你可以调⽤

ax.legend()

plt.legend()

来⾃动创建图例:

legend

⽅法有⼏个其它的

loc

位置参数选项。请查看⽂档字符串(使⽤

ax.legend?

)。

loc

告诉

matplotlib

要将图例放在哪。如果你不是吹⽑求疵的话,

"best"

是不错的选择,因为它会选择最不碍事的位置。要从图例中去除⼀个或多个元素,不传⼊

label

或传⼊

label='nolegend'

即可。

使用rc配置默认属性

使用rc配置文件来自定义图形的各种默认属性,如设置中文字体等

属性总结详情

绘制各类图形

API