2016-03-24 3 views
2

Как определить, имеет ли ось ось с двумя осями, написанную поверх нее? Например, если дано ax ниже, как я могу обнаружить, что существует ax2?Как определить, была ли сгенерирована двойная ось для оси matplotlib

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

ответ

4

Я не думаю, что есть встроенный, чтобы сделать это, но вы могли бы, вероятно, просто проверить, есть ли какие-либо другие оси на чертеже тот же ограничивающий прямоугольник как оси в вопросе. Вот быстрый фрагмент, который будет делать это:

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 
+0

Это должно быть сделано! –

+0

twins_of_ax = [a для a в fig.axes, если a! = Ax и a.bbox.bounds == ax.bbox.bounds] – theCake

0

Вы можете проверить, есть ли оси с общими осями. Это не обязательно было бы двойником. Но вместе с запросом на позицию этого будет достаточно.

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]) 
Смежные вопросы