当前位置:   article > 正文

利用Python进行数据分析4-绘图与可视化_python plot bar

python plot bar

信息可视化(也叫绘图)是数据分析中最重要的⼯作之⼀。

matplotlib API⼊⻔

import numpy as np
import pandas as pd
PREVIOUS_MAX_ROWS = pd.options.display.max_rows
pd.options.display.max_rows = 20
np.random.seed(12345)
import matplotlib.pyplot as plt
import matplotlib
plt.rc('figure', figsize=(10, 6))
np.set_printoptions(precision=4, suppress=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

matplotlib的通常引⼊约定是:

#导入包
import matplotlib.pyplot as plt
  • 1
  • 2

在Jupyter中运⾏%matplotlib notebook(或在IPython中运⾏%matplotlib),就可以创建⼀个简单的图形。如果⼀切设置正确,会看到下图:

import numpy as np
data = np.arange(10)
data
#绘制简单的线图
plt.plot(data)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
虽然seaborn这样的库和pandas的内置绘图函数能够处理许多普通的绘图任务,但如果需要⾃定义⼀些⾼级功能的话就必须学习matplotlib API。

Figure和Subplot

matplotlib的图像都位于Figure对象中。你可以⽤plt.figure创建⼀个新的Figure:

fig	=	plt.figure()
  • 1

如果⽤的是IPython,这时会弹出⼀个空窗⼝,但在Jupyter中,必须再输⼊更多命令才能看到。plt.figure有⼀些选项,特别是figsize,它⽤于确保当图⽚保存到磁盘时具有⼀定的⼤⼩和纵横⽐。
不能通过空Figure绘图。必须⽤add_subplot创建⼀个或多个subplot才⾏:

ax1 = fig.add_subplot(2, 2, 1)
  • 1

这条代码的意思是:图像应该是2×2的(即最多4张图),且当前选中的是4个subplot中的第⼀个(编号从1开始)。如果再把后⾯两个subplot也创建出来,最终得到的图像如下图所示:

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(np.random.randn(50).cumsum(), 'k--')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
如果这时执⾏⼀条绘图命令(如plt.plot([1.5, 3.5, -2, 1.6])),
matplotlib就会在最后⼀个⽤过的subplot(如果没有则创建⼀
个)上进⾏绘制,隐藏创建figure和subplot的过程。因此,如果
我们执⾏下列命令,你就会得到如下图所示的结果:

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(np.random.randn(50).cumsum(), 'k--')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
"k–"是⼀个线型选项,⽤于告诉matplotlib绘制⿊⾊虚线图。上⾯那些由fig.add_subplot所返回的对象是AxesSubplot对象,直接调⽤它们的实例⽅法就可以在其它空着的格⼦⾥⾯画图了,如下图所示:

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(np.random.randn(50).cumsum(), 'k--')
#继续绘制两次
_ = 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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
你可以在matplotlib的⽂档中找到各种图表类型。
创建包含subplot⽹格的figure是⼀个⾮常常⻅的任务,matplotlib有⼀个更为⽅便的⽅法plt.subplots,它可以创建⼀个新的Figure,并返回⼀个含有已创建的subplot对象的NumPy数组:

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

在这里插入图片描述
这是⾮常实⽤的,因为可以轻松地对axes数组进⾏索引,就好像是⼀个⼆维数组⼀样,例如axes[0,1]。你还可以通过sharex和sharey指定subplot应该具有相同的X轴或Y轴。在⽐较相同范围的数据时,这也是⾮常实⽤的,否则,matplotlib会⾃动缩放各图表的界限。有关该⽅法的更多信息,请参⻅表1。
下表为表1:

参数 说明
nrows subplot的行数
ncols subplot的列数
sharex 所有subplot应该使用相同的的X轴刻度(调节xlim将影响所有subplot)
sharey 所有subplot应该使用相同的y轴刻度(调节ylim将影响所有的subplot)
subplot_kw 用于创建个subplot的关键字字典
**fig_kw 创建figure时的其他关键字,如plt.subplots(2,2,figsize=(8,6))

调整subplot周围的间距

默认情况下,matplotlib会在subplot外围留下⼀定的边距,并在subplot之间留下⼀定的间距。间距跟图像的⾼度和宽度有关,因此,如果你调整了图像⼤⼩(不管是编程还是⼿⼯),间距也会⾃动调整。利⽤Figure的subplots_adjust⽅法可以轻⽽易举地修改间距,此外,它也是个顶级函数:
PS:调试过程中发现书中源代码无法运行,在此处更改了。

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

wspace和hspace⽤于控制宽度和⾼度的百分⽐,可以⽤作subplot之间的间距。下⾯是⼀个简单的例⼦,其中我将间距收缩到了0(如下图所示):

fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/426547
推荐阅读
相关标签
  

闽ICP备14008679号