xticks xlabel axessubplot python matplotlib plot

python - xlabel - Romper// en el eje x de matplotlib



matplotlib xticks (2)

La solución proporcionada por xnx es un buen comienzo, pero hay un problema pendiente de que las escalas de los ejes x son diferentes entre las parcelas. Esto no es un problema si el rango en el diagrama de la izquierda y el rango en el diagrama de la derecha son iguales, pero si son desiguales, la subtrama todavía dará a las dos gráficas el mismo ancho, por lo que la escala del eje x será diferente entre dos gráficos (como es el caso con el ejemplo de xnx). Hice un paquete, brokenaxes para lidiar con esto.

Esta pregunta ya tiene una respuesta aquí:

La mejor manera de describir lo que quiero lograr es usar mi propia imagen:

Ahora tengo mucho espacio muerto en el diagrama de espectros, especialmente entre 5200 y 6300. Mi pregunta es bastante simple, ¿cómo agregaría un pequeño // salto que se parece a esto (imagen levantada de la red):

Estoy usando esta configuración para mis tramas:

nullfmt = pyplot.NullFormatter() fig = pyplot.figure(figsize=(16,6)) gridspec_layout1= gridspec.GridSpec(2,1) gridspec_layout1.update(left=0.05, right=0.97, hspace=0, wspace=0.018) pyplot_top = fig.add_subplot(gridspec_layout1[0]) pyplot_bottom = fig.add_subplot(gridspec_layout1[1]) pyplot_top.xaxis.set_major_formatter(nullfmt)

Estoy bastante seguro de que se puede lograr con gridpsec, pero se agradecería mucho un tutorial avanzado que cubra exactamente cómo se logra esto.

También me disculpo si esta pregunta se ha tratado previamente en stackoverflow pero he buscado exhaustivamente el procedimiento correcto para gridSpec pero no he encontrado nada todavía.

Me las arreglé para llegar tan lejos, más o menos allí:

Sin embargo, mis líneas de corte no son tan pronunciadas como me gustaría ... ¿cómo las cambio? (He hecho uso de la respuesta de ejemplo a continuación)


Puede adaptar example para una ruptura en el eje x directamente:

""" Broken axis example, where the x-axis will have a portion cut out. """ import matplotlib.pylab as plt import numpy as np x = np.linspace(0,10,100) x[75:] = np.linspace(40,42.5,25) y = np.sin(x) f,(ax,ax2) = plt.subplots(1,2,sharey=True, facecolor=''w'') # plot the same data on both axes ax.plot(x, y) ax2.plot(x, y) ax.set_xlim(0,7.5) ax2.set_xlim(40,42.5) # hide the spines between ax and ax2 ax.spines[''right''].set_visible(False) ax2.spines[''left''].set_visible(False) ax.yaxis.tick_left() ax.tick_params(labelright=''off'') ax2.yaxis.tick_right() # This looks pretty good, and was fairly painless, but you can get that # cut-out diagonal lines look with just a bit more work. The important # thing to know here is that in axes coordinates, which are always # between 0-1, spine endpoints are at these locations (0,0), (0,1), # (1,0), and (1,1). Thus, we just need to put the diagonals in the # appropriate corners of each of our axes, and so long as we use the # right transform and disable clipping. d = .015 # how big to make the diagonal lines in axes coordinates # arguments to pass plot, just so we don''t keep repeating them kwargs = dict(transform=ax.transAxes, color=''k'', clip_on=False) ax.plot((1-d,1+d), (-d,+d), **kwargs) ax.plot((1-d,1+d),(1-d,1+d), **kwargs) kwargs.update(transform=ax2.transAxes) # switch to the bottom axes ax2.plot((-d,+d), (1-d,1+d), **kwargs) ax2.plot((-d,+d), (-d,+d), **kwargs) # What''s cool about this is that now if we vary the distance between # ax and ax2 via f.subplots_adjust(hspace=...) or plt.subplot_tool(), # the diagonal lines will move accordingly, and stay right at the tips # of the spines they are ''breaking'' plt.show()

Para sus propósitos, simplemente trace sus datos dos veces (una vez en cada eje, ax y ax2 y configure sus xlim s adecuadamente. Las "líneas de ruptura" deben moverse para coincidir con la nueva ruptura porque se representan en coordenadas de eje relativas en lugar de coordenadas de datos.

Las líneas de corte son solo líneas de trazado sin recortar dibujadas entre un par de puntos. Por ejemplo, ax.plot((1-d,1+d), (-d,+d), **kwargs) traza la línea de ruptura entre el punto (1-d,-d) y (1+d,+d) en el primer eje: este es el inferior derecho. Si desea cambiar el graidente, cambie estos valores adecuadamente. Por ejemplo, para hacerlo más empinado, intente ax.plot((1-d/2,1+d/2), (-d,+d), **kwargs)