您的位置:首页 > 编程语言 > Python开发

Python数据可视化matplotlib(二)—— 子图功能

2018-04-01 17:44 1386 查看

Python数据可视化matplotlib(二)—— 子图功能

在matplotlib中,整个图像为一个Figure对象,在Figure对象中可以包含一个或者多个Axes对象,每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('bmh')


plt.figure() 创建绘图对象

# plt.figure()  绘图对象
# plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True,
#          FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)

fig1 = plt.figure(num=1,figsize=(4, 2))  # 创建一个图像对象
plt.plot(np.random.rand(50).cumsum(),'-.k')    # 图像会显示在上面离它最近的图像对象中
fig2 = plt.figure(num=2,figsize=(4,2))
plt.plot(np.random.randint(1,11,size=5).cumprod(),'-.g')
# num:图表序号,可以试试不写或都为同一个数字的情况,图表如何显示
# figsize:图表大小
# 当我们调用plot时,如果设置plt.figure(),
# 则会自动调用figure()生成一个figure, 严格的讲,是生成subplots(111)


[<matplotlib.lines.Line2D at 0x2a51f9ec0b8>]






子图创建

先建立子图,后一次填充其他子图

# 子图创建1 - 先建立子图然后一次填充其他子图

fig = plt.figure(figsize=(10,6), facecolor = 'gray')

ax1 = fig.add_subplot(2,2,1)  # 创建一个图表,该图在2行2列的子图中的第一个位置,即一行左图
plt.plot(np.random.rand(50).cumsum(),'--g')

ax4 = fig.add_subplot(2,2,4)    #创建一个图表,位于2行2列,即二行右图
ax4.hist(np.random.rand(50).cumsum(),alpha=0.5,color='b')
# 先创建图表figure,然后生成子图,(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
# 创建子图后绘制图表,绘制到最后一个子图

ax2 = fig.add_subplot(2,2,2)
df2 = pd.DataFrame(np.random.rand(10,4), columns=['a','b','c','d'])
ax2.plot(df2, linestyle='--',marker='.')
# 也可以直接在子图后用图表创建函数直接生成图表


[<matplotlib.lines.Line2D at 0x2a5213fa2e8>,
<matplotlib.lines.Line2D at 0x2a5213fa400>,
<matplotlib.lines.Line2D at 0x2a5213fa550>,
<matplotlib.lines.Line2D at 0x2a5213fa6a0>]




先创建一个figure,后填充子图

# 子图创建2 - 创建一个新的figure,并返回一个subplot对象的numpy数组 → plt.subplot

fig,axes = plt.subplots(2,3,figsize=(10,4))
print(type(fig), '\n', type(axes))

ax1=axes[0, 1]
ax1.plot(np.random.rand(100))

ax2 = axes[1,2]
ax2.plot(np.random.randint(10,size=10).cumsum(),'--')


<class 'matplotlib.figure.Figure'>
<class 'numpy.ndarray'>

[<matplotlib.lines.Line2D at 0x2a52317a5c0>]




plt.subplot()参数调整

# plt.subplot()参数调整

fig,axes = plt.subplots(2,2,figsize=(6,4),
sharex=True,
sharey=True)
# sharex,sharey:是否共享x,y刻度

for i in range(2):
for j in range(2):
axes[i, j].hist(np.random.randn(500),color='b', alpha=0.8)
# 利用循环来填充数据

plt.subplots_adjust(wspace=0, hspace=0.1)
# wspace,hspace:用于控制宽度和高度的百分比,比如subplot之间的间距




# 子图创建3 - 多系列图,分别绘制

df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
df = df.cumsum()

df.plot(style ='--', alpha=0.5, grid=True,figsize=(8,6),
subplots = True,
layout=(2, 2))
plt.subplots_adjust(wspace=0,hspace=0.2)
# plt.plot()基本图表绘制函数 → subplots,是否分别绘制系列(子图)
# layout:绘制子图矩阵,按顺序填充


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: