pandas数据处理之绘制子图图像subplot,subplot2grid,add_subplot,subplots,

matplotlib 是可以组合许多的小图, 放在一张大图里面显示的. 使用到的方法叫作 subplot.
使用import导入matplotlib.pyplot模块, 并简写成plt. 使用plt.figure创建一个图像窗口.

在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个或者多个Axes对象。每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域。其中:title为图像标题,Axis为坐标轴, Label为坐标轴标注,Tick为刻度线,Tick Label为刻度注释。当我们调用plot时,matplotlib会调用gca()获取当前的axes绘图区域,而且gca反过来调用gcf()来获得当前的figure。如果figure为空,它会自动调用figure()生成一个figure, 严格的讲,是生成subplots(111)

import matplotlib.pyplot as plt
fig=plt.figure()
plt.subplot(221) # 第一行的左图
plt.subplot(222) # 第一行的右图
plt.subplot(212) # 第二整行
plt.show()

subplot2grid的使用

import matplotlib.pyplot as plt
fig=plt.figure(1)##定义画布,必须要用

fig.set(alpha=0.2)##alpha代表透明度,控制透明度,0为完全透明,1为不透明
plt.subplot2grid((2,3),(0,0)) ##分格展示,利用跨度显示,分成2行,3列,第一幅图是0,0
data_train.Survived.value_counts().plot(kind='bar')# 柱状图,series绘图
plt.title("获救情况,(1为获救)")
plt.ylabel("人数")
# plt.show()

plt.subplot2grid((2,3),(0,1))
data_train.Pclass.value_counts().plot(kind="bar")
plt.title("乘客等级分布")
plt.ylabel("人数")

plt.subplot2grid((2,3),(0,2))
plt.scatter(data_train.Survived,data_train.Age)
plt.ylabel("年龄")
plt.grid(b=True,which="major",axis="y")  ##网格线设置
plt.title("按年龄看获救分布,(1为获救)")
# plt.show() ##

plt.subplot2grid((2,3),(1,0),colspan=2)##绘制密度图
data_train.Age[data_train.Pclass == 1].plot(kind='kde')
data_train.Age[data_train.Pclass == 2].plot(kind='kde')
data_train.Age[data_train.Pclass == 3].plot(kind='kde')
plt.xlabel("年龄")
plt.ylabel("密度")
plt.title("各等级乘客的年龄分布")
plt.legend(("头等舱","2等舱","3等舱"),loc="best") ##loc表示图例位置
#plt.show()

plt.subplot2grid((2,3),(1,2))
data_train.Embarked.value_counts().plot(kind='bar')
plt.title(u"各登船口岸上船人数")
plt.ylabel(u"人数")
plt.show()##显示图像,一般置于绘制子图结束末尾

colspan=3表示列的跨度为3, rowspan=1表示行的跨度为1. colspan和rowspan缺省, 默认跨度为1.

add_subplot的使用

pyplot的方式中plt.subplot()参数和面向对象中的add_subplot()参数和含义都相同。add_subplot(3, 2, 1) # 推荐此种写法

import matplotlib.pyplot as plt
#各种舱各种性别获救情况
fig=plt.figure(4)##增添画布,必须要有这一步
fig.set(alpha=0.2)
plt.title("各舱各性别的获救情况")
ax1=fig.add_subplot(141)  ##切割画布,并且定位画布到1行4列的第一个
data_train.Survived[data_train.Sex=="female"][data_train.Pclass!=3].value_counts().plot(kind='bar', label="female highclass", color='#FA2479')
ax1.set_xticklabels([u"获救", u"未获救"], rotation=0)
ax1.legend([u"女性/高级舱"], loc='best')

ax2=fig.add_subplot(142, sharey=ax1)
data_train.Survived[data_train.Sex == 'female'][data_train.Pclass == 3].value_counts().plot(kind='bar', label='female, low class', color='pink')
ax2.set_xticklabels([u"未获救", u"获救"], rotation=0)
plt.legend([u"女性/低级舱"], loc='best')

ax3=fig.add_subplot(143, sharey=ax1)
data_train.Survived[data_train.Sex == 'male'][data_train.Pclass != 3].value_counts().plot(kind='bar', label='male, high class',color='lightblue')
ax3.set_xticklabels([u"未获救", u"获救"], rotation=0)
plt.legend([u"男性/高级舱"], loc='best')

ax4=fig.add_subplot(144, sharey=ax1)
data_train.Survived[data_train.Sex == 'male'][data_train.Pclass == 3].value_counts().plot(kind='bar', label='male low class', color='steelblue')
ax4.set_xticklabels([u"未获救", u"获救"], rotation=0)
plt.legend([u"男性/低级舱"], loc='best')
plt.show()

plt.subplots

fig, ax = plt.subplots(1,3),其中参数1和3分别代表子图的行数和列数,一共有 1x3 个子图像。函数返回一个figure图像和子图ax的array列表。
fig, ax = plt.subplots(1,3,1),最后一个参数1代表第一个子图。
如果想要设置子图的宽度和高度可以在函数内加入figsize值
fig, ax = plt.subplots(1,3,figsize=(15,7)),这样就会有1行3个15x7大小的子图。

参数

nrows,ncols:子图的行列数。

sharex, sharey:

设置为 True 或者 ‘all’ 时,所有子图共享 x 轴或者 y 轴,

设置为 False or ‘none’ 时,所有子图的 x,y 轴均为独立,

设置为 ‘row’ 时,每一行的子图会共享 x 或者 y 轴,

设置为 ‘col’ 时,每一列的子图会共享 x 或者 y 轴

返回值
fig: matplotlib.figure.Figure 对象,即为画布
ax:子图对象( matplotlib.axes.Axes)或者是他的数组

fig,ax = plt.subplots(figsize = (9,9)) ##创建画布,和图形对象ax
ax=sns.heatmap(train_corr, vmin=-1, vmax=1 , annot=True , square=True)#画热力图

 

 

 

 

 

 

 

 

 

 

 

 

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值