Alinee las marcas secundarias del eje y con el gráfico de bandas en el eje x primario

import seaborn as sns import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline labels1 = ['A','B','C','D'] labels2 = ['E','F','G','H'] fig, ax = plt.subplots() df = pd.DataFrame(np.random.random(size=(10,4)), columns=('A','B','C','D')) sns.stripplot(data=df, orient='h', ax=ax) ax2 = ax.twinx() ax2.set(yticks=ax.get_yticks(), yticklabels=labels2); 

Enlace al gráfico producido.

Me gustaría producir algunas tags en un eje y secundario que se alinee con los tics del eje y de un gráfico de bandas en el eje y primario. Me gustaría que E estuviera a la misma altura que D, F con C, etc.

He intentado algunos métodos diferentes para alinear las garrapatas pero sin suerte.

Cualquier otra sugerencia sobre cómo agregar estas tags es muy útil.

Las ax2.set(yticks=ax.get_yticks(), yticklabels=labels2) ya están establecidas correctamente usando ax2.set(yticks=ax.get_yticks(), yticklabels=labels2) . Lo que falta es los límites de los ejes. Esto tiene que ser el mismo para ambos ejes.

Usted puede usar

 ax2.set_ylim(ax.get_ylim()) 

o ir junto con .set :

 ax2.set(yticks=ax.get_yticks(), yticklabels=labels2, ylim=ax.get_ylim()) 

Ejemplo completo:

 import seaborn as sns import numpy as np import pandas as pd import matplotlib.pyplot as plt labels1 = ['A','B','C','D'] labels2 = ['E','F','G','H'] fig, ax = plt.subplots() df = pd.DataFrame(np.random.random(size=(10,4)), columns=('A','B','C','D')) sns.stripplot(data=df, orient='h', ax=ax) ax2 = ax.twinx() ax2.set(yticks=ax.get_yticks(), yticklabels=labels2, ylim=ax.get_ylim()) plt.show() 

introduzca la descripción de la imagen aquí