详解matplotlib-broken axis
当数据不在一个数量级上,但又要在一张图上同时反映大数据和小数据的变化规律,需要绘制断裂坐标轴。
本文详细介绍如何进行断裂坐标轴(broken_axis)设置。
方法1 x轴坐标轴断裂 or 打断
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
pts = np.random.rand(30)*.2
pts[[3, 14]] += 1.8# 将索引为3个和14的元素加1.8处理成两个离散点
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, dpi=100)
ax1.plot(pts)
ax2.plot(pts)
ax1.set_xlim(0, 10) # 子图1设置y轴范围,只显示部分图
ax2.set_xlim(11, 20) # 子图2设置y轴范围,只显示部分图
ax1.spines['right'].set_visible(False)#关闭子图1中底部脊
ax2.spines['left'].set_visible(False)##关闭子图2中顶部脊
d = .85#设置倾斜度
#绘制断裂处的标记
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=15,
linestyle='none', color='r', mec='r', mew=1, clip_on=False)
ax1.plot([1, 1], [1, 0],transform=ax1.transAxes, **kwargs)
ax2.plot([0, 0], [0, 1], transform=ax2.transAxes, **kwargs)
plt.tight_layout()
plt.show()
方法2、y轴坐标轴断裂 or 打断
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
pts = np.random.rand(30)*.2
pts[[3, 14]] += 1.8#将索引为3个和14的元素加1.8处理成两个离散点
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, dpi=100)
ax1.plot(pts)
ax2.plot(pts)
ax1.set_ylim(.4, 2.) # 子图1设置y轴范围,只显示部分图
ax2.set_ylim(0, .28) # 子图2设置y轴范围,只显示部分图
ax1.spines['bottom'].set_visible(False)#关闭子图1中底部脊
ax2.spines['top'].set_visible(False)##关闭子图2中顶部脊
ax2.set_xticks(range(0,31,1))
d = .85#设置倾斜度
#绘制断裂处的标记
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=15,
linestyle='none', color='r', mec='r', mew=1, clip_on=False)
ax1.plot([0, 1], [0, 0],transform=ax1.transAxes, **kwargs)
ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs)
plt.tight_layout()
plt.show()
以上方法可以设置的很个性化,但是特别繁琐,想更简单,请使用brokenaxes。
方法3、brokenaxes打断坐标轴
该方法非常简单,相较于1,2方法。
import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np
fig = plt.figure(dpi=120)
bax = brokenaxes(xlims=((0, 10), (11, 20)), #设置x轴裂口范围
ylims=((0, 0.28), (0.4, 2)), #设置y轴裂口范围
hspace=0.25,#y轴裂口宽度
wspace=0.2,#x轴裂口宽度
despine=False,#是否y轴只显示一个裂口
diag_color='r',#裂口斜线颜色
)
bax.plot(pts)
plt.show()
推荐阅读: 👉Python matplotlib保姆级教程 👉保姆级matplotlib教程—详细目录 👉Python seaborn保姆级教程 👉保姆级seaborn教程:详细目录
加入学习(收费)