matplotlib使用brokenaxes实现分组柱状断轴图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为要做实验,所以在网上找了一圈如何实现断轴图,发现用brokenaxes比较省事。
但是没找到brokenaxes比较详细的用法,所以在这里补充一下。

一、安装brokenaxes

在终端里安装就行了

pip install brokenaxes

二、绘制多柱状图

下面是我绘制的一个分组柱状图,每组三个,对应的库安装好就行。

from brokenaxes import brokenaxes
import matplotlib.pyplot as plt
import numpy as np

def draw(x, a, b, c):
    fontparams = {
        'font.family': 'serif',
        'font.serif': 'Times New Roman',
        'font.style': 'normal',
        'font.weight': 'bold',  # or large,small
        'mathtext.fontset': 'stix'
    }

    plt.rcParams.update(fontparams)

    index = np.arange(len(x))  # the label locations
    width = 0.25  # the width of the bars
    opacity = 0.8
    
    fig, ax = plt.subplots()
    rects1 = ax.bar(index, a, width, alpha=opacity, label='a',ec='black', ls='-', lw=0.5)
    rects2 = ax.bar(index + width,b, width,alpha=opacity, label='b',ec='black', ls='-', lw=0.5)
    rects3 = ax.bar(index + 2*width, c, width,alpha=opacity, label='c',ec='black', ls='-', lw=0.5)


    plt.legend(loc='upper right')
    plt.xticks(index + width, x)

    plt.xlabel('x轴标题', fontweight='bold')
    plt.ylabel('y轴标题', fontweight='bold')
    plt.grid(ls='--', c='grey')
    # plt.ticklabel_format(axis="y", style="sci", scilimits=(0,0)) #科学计数法表示

     # plt.savefig("picture", dpi=300) #保存图片,指定清晰度
    plt.show()

三、加入brokenaxes

  • 下面的brokenaxes需要设置一些参数,比如xlim, ylim,wspace, hspace等等,然后使用bax去设置柱状图。
  • 这里要注意的是,下面设置图例和横纵坐标之类的都要使用bax,bax设置这些参数的方法名称和plt是不同的,传入的参数也有点区别。
  • 和上面代码有所不同的是,这里的要使得图片横坐标居中显示不能像上面那样写了(我也是试了不同方法才发现的)。
  • 还有就是如何保存断轴图。这里要用plt来保存,bax我没找到对应的方法。
from brokenaxes import brokenaxes
import matplotlib.pyplot as plt
import numpy as np

def draw(x, a, b, c):
    fontparams = {
        'font.family': 'serif',
        'font.serif': 'Times New Roman',
        'font.style': 'normal',
        'font.weight': 'bold',
        'mathtext.fontset': 'stix'
    }

    plt.rcParams.update(fontparams)

    index = np.arange(len(x))  # the label locations
    width = 0.25  # the width of the bars
    opacity = 0.8  #设置线条透明度
    
    bax = brokenaxes(#xlims=((0, 10), (11, 20)),
                 ylims=((0, 25000),(200000,400000)), 
                 #wspace=0.2,#x轴裂口宽度  
                 hspace=0.07, #y轴断裂的宽度
                 despine=False, #两边都显示断轴
                 diag_color='r',   #断轴的颜色            
            )
    
    bax.bar(index - width, a, width, alpha=opacity, label='a', ec='black', ls='-', lw=0.5)
    bax.bar(index, b, width, alpha=opacity, label='b', ec='black', ls='-', lw=0.5)
    bax.bar(index + width, c, width, alpha=opacity, label='c', ec='black', ls='-', lw=0.5)

    bax.legend(loc='upper right')
    bax.set_xticks(index)
    bax.set_xticklabels(x)  # 去掉第一个元素,使其居中

    bax.set_xlabel('x轴标题', fontweight='bold')
    bax.set_ylabel('y轴标题', fontweight='bold', labelpad=35) #labelpad指定与y轴的距离
    bax.grid(ls='--', c='grey') #加上网格线

    # plt.savefig("picture", dpi=300) #保存图片,指定清晰度
    plt.show()

总结

这里主要实现了y轴的断轴图,实现x轴的断轴图只需在brokenaxes添加上参数就行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值