如何检测是否已为matplotlib轴生成双轴

时间:2016-03-24 20:36:39

标签: python matplotlib

如何检测轴是否有双轴写在它上面?例如,如果下面有ax,我怎么才能发现ax2存在?

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3])
ax2 = ax.twinx()

3 个答案:

答案 0 :(得分:5)

我认为没有任何内置功能可以执行此操作,但您可以检查图中的任何其他轴是否与相关轴具有相同的边界框。这是一个快速的代码片段:

def has_twin(ax):
    for other_ax in ax.figure.axes:
        if other_ax is ax:
            continue
        if other_ax.bbox.bounds == ax.bbox.bounds:
            return True
    return False

# Usage:

fig, ax = plt.subplots()
print(has_twin(ax))  # False

ax2 = ax.twinx()
print(has_twin(ax))  # True

答案 1 :(得分:1)

您可以检查轴是否有共享轴。但这并不一定是双胞胎。但是,只要询问这个位置就足够了。

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2,2)
ax5 = axes[0,1].twinx()

def has_twinx(ax):
    s = ax.get_shared_x_axes().get_siblings(ax)
    if len(s) > 1:
        for ax1 in [ax1 for ax1 in s if ax1 is not ax]:
            if ax1.bbox.bounds == ax.bbox.bounds:
                return True
    return False

print has_twinx(axes[0,1])
print has_twinx(axes[0,0])

答案 2 :(得分:0)

我想提出一个import re str_arg = "\"Apartment at Chennai has 4 rooms with a swimming pool\" \"this apartment has 2/3 room with a coridor\"" room_found = re.findall(r"([0-9]+) rooms", str_arg) print(room_found) 函数而不是get_twin -> Axes,它具有更多的应用程序。您仍然可以通过检查has_twin -> bool而不是if get_twin(...) is None来检查斧头是否有双胞胎,因此不会丢失功能。

这基于 @ImportanceOfBeingErnest 的答案。 @jakevdp 的健壮性稍差一些,因为它没有明确检查兄弟姐妹。

if has_twin(...)