pythonic生物人

详解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()
Image

方法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()

Image以上方法可以设置的很个性化,但是特别繁琐,想更简单,请使用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()
Image

-END-
推荐阅读:
👉Python matplotlib保姆级教程
👉保姆级matplotlib教程—详细目录
👉Python seaborn保姆级教程
👉保姆级seaborn教程:详细目录
图片
图片
图片
图片
图片

图片

图片

图片

图片

图片

图片

图片

加入学习(收费)

图片