首页 > 软件开发 > 架构

Python数据分析入门(二十七):数据可视化之多图布局

admin 架构 2021-04-26 18:16:06  
后台-系统设置-扩展变量-手机广告位-内容正文底部

Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

https://space.bilibili.com/523606542 

Python学习交流群:1039649593

多图布局

解决元素重叠的问题:

在一个Figure上面,可能存在多个Axes对象,如果Figure比较小,那么有可能会造成一些图形元素重叠,这时候我们就可以通过fig.tight_layout或者是fig.subplots_adjust方法来帮我们调整。假如现在没有经过调整,那么以下代码的效果图如下:

import matplotlib.pyplot as plt
import numpy as np

def example_plot(ax, fontsize=12):
    ax.plot([1, 2])
    ax.set_xlabel('x-label', fontsize=fontsize)
    ax.set_ylabel('y-label', fontsize=fontsize)
    ax.set_title('Title', fontsize=fontsize)

fig,axes = plt.subplots(2,2)
fig.set_facecolor("y")
example_plot(axes[0,0])
example_plot(axes[0,1])
example_plot(axes[1,0])
example_plot(axes[1,1])

效果图如下:

为了避免多个图重叠,可以使用plt.tight_layout来实现:

# 之前的代码...
plt.tight_layout()

效果图如下:

其中tight_layout还有两个参数可以使用,分别是w_pad和h_pad,这两个参数分别表示的意思是在水平方向的图之间的间距,以及在垂直方向这些图的间距。

另外也可以通过fig.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None)来实现,效果如下:

# 之前的代码...  
fig.subplots_adjust(0,0,1,1,hspace=0.5,wspace=0.5)

效果图如下:

自定义布局方式:

如果布局不是固定的几宫格的方式,而是某个图占据了多行或者多列,那么就需要采用一些手段来实现。如果不是很复杂,那么直接可以通过subplot等方法来实现。示例代码如下:

ax1 = plt.subplot(221)
ax2 = plt.subplot(223)
ax3 = plt.subplot(122)

效果图如下:

但是如果实现的布局比较复杂,那么就需要采用GridSpec对象来实现。示例代码如下:

fig = plt.figure()
# 创建3行3列的GridSpec对象
gs = fig.add_gridspec(3,3)
ax1 = fig.add_subplot(gs[0,0:3])
ax1.set_title("[0,0:3]")
ax2 = fig.add_subplot(gs[1,0:2])
ax2.set_title("[1,0:2]")
ax3 = fig.add_subplot(gs[1:3,2])
ax3.set_title("[1:3,2]")
ax4 = fig.add_subplot(gs[2,0])
ax4.set_title("[2,0]")
ax5 = fig.add_subplot(gs[2,1])
ax5.set_title("[2,1]")
plt.tight_layout()

效果图如下:

也可以设置宽高比例。示例代码如下:

# 设置宽度比例为1:2:1
widths = (1,2,1)
# 设置高度比例为2:2:1
heights = (2,2,1)
fig = plt.figure()
# 创建GridSpec对象的时候指定宽高的比
gs = fig.add_gridspec(3,3,width_ratios=widths,height_ratios=heights)
for row in range(0,3):
    for col in range(0,3):
        fig.add_subplot(gs[row,col])
plt.tight_layout()

效果图如下:

手动设置位置:

通过fig.add_axes的方式添加Axes对象,可以直接指定位置。也可以在添加完成后,通过axes.set_position的方式设置位置。示例代码如下:

# add_axes的方式
fig = plt.figure()
fig.add_subplot(111)
fig.add_axes([0.2,0.2,0.4,0.4])

# 设置position的方式
fig,axes = plt.subplots(1,2)
axes[1].set_position([0.2,0.2,0.4,0.4])

散点图和直方图合并实战:

fig = plt.figure(figsize=(8,8))
widths = (2,0.5)
heights = (0.5,2)
gs = fig.add_gridspec(2,2,width_ratios=widths,height_ratios=heights)
# 顶部的直方图
ax1 = fig.add_subplot(gs[0,0])
ax1.hist(male_athletes['Height'],bins=20)
for tick in ax1.xaxis.get_major_ticks():
    tick.label1On = False

# 中间的散点图
ax2 = fig.add_subplot(gs[1,0])
ax2.scatter('Height','Weight',data=male_athletes)

# 右边的直方图
ax3 = fig.add_subplot(gs[1,1])
ax3.hist(male_athletes['Weight'],bins=20,orientation='horizontal')
for tick in ax3.yaxis.get_major_ticks():
    tick.label1On = False
fig.tight_layout(h_pad=0,w_pad=0)

效果图如下:

文章来源:https://www.cnblogs.com/qshhl/archive/2021/04/26/14705304.html

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://jcdi.cn/ruanjiankaifa/jiagou/904.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码