提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
因为要做实验,所以在网上找了一圈如何实现断轴图,发现用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添加上参数就行。