tags de la garrapata

Estoy usando GridSpec para trazar dos diagtwigs uno debajo del otro sin un espacio intermedio entre

gs = gridspec.GridSpec(3, 1) gs.update(hspace=0., wspace=0.) ax1 = plt.subplot(gs[0:2, 0]) ax2 = plt.subplot(gs[2, 0], sharex=ax1) 

que funciona bien. Sin embargo, quiero deshacerme de las tags de marca superior e inferior de cada subttwig. Para eso uso

 nbins = len(ax1.get_yticklabels()) ax1.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='both')) nbins = len(ax2.get_yticklabels()) ax2.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='both')) 

que en muchos casos funciona bien. En algunas plots, sin embargo, una o más de las 4 tags para podar todavía están allí. ax1.get_ylim() por ejemplo, ax1.get_ylim() y noté que en lugar de, por ejemplo, que el límite superior es 10 (como se muestra en el gráfico en sí), en realidad es 10.000000000000002 , que sospecho que es la razón por la que no se ha eliminado. ¿Cómo sucede eso y cómo puedo deshacerme de eso?

Aquí hay un ejemplo: Tenga en cuenta que en la figura el eje y está invertido y ninguna etiqueta está podada, aunque debería estarlo. También tenga en cuenta que, por algún motivo, la etiqueta y más baja está configurada en una posición negativa, que no veo. Las posiciones de la marca y se muestran en las coordenadas del eje en el texto dentro de los gráficos. ¡En la imagen de abajo, la etiqueta en 10.6 no debería estar allí!

 import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec from matplotlib.ticker import MaxNLocator import numpy as np x1 = 1 y1 = 10.53839 err1 = 0.00865 x2 = 2 y2 = 9.43045 err2 = 0.00658 plt.clf() fig = plt.figure(figsize=(6, 6)) gs = gridspec.GridSpec(3, 1) gs.update(hspace=0., wspace=0.) ax1 = plt.subplot(gs[0:2, 0]) ax1.errorbar(x1, y1, yerr=err1) ax1.errorbar(x2, y2, yerr=err2) ax1.invert_yaxis() plt.setp(ax1.get_xticklabels(), visible=False) # Remove x-labels between the plots plt.xlim(0, 3) ax2 = plt.subplot(gs[2, 0], sharex=ax1) nbins = len(ax1.get_yticklabels()) ax1.yaxis.set_major_locator(MaxNLocator(nbins=8, prune='both')) nbins = len(ax2.get_yticklabels()) ax2.yaxis.set_major_locator(MaxNLocator(nbins=6, prune='both')) plt.savefig('prune.png') plt.close() 

ciruela pasa

¿Podría ser que estás mirando la etiqueta que está más a la izquierda en el eje x de la gráfica superior? Si es así, esto debería hacer el truco:

 ax1.set_xticklabels([]) 

EDITAR : Si usa sharex , tiene que usar esto, de lo contrario las tags de tick se eliminan en ambos ejes.

 plt.setp(ax1.get_xticklabels(), visible=False)