Cómo configurar xlim e ylim para una trama secundaria [duplicado]

Resuelto Cupitor asked hace 11 años • 1 respuestas

Me gustaría limitar los ejes X e Y en matplotlib para una subtrama específica. La figura de la trama secundaria en sí no tiene ninguna propiedad de eje. Por ejemplo, quiero cambiar solo los límites del segundo gráfico:

import matplotlib.pyplot as plt
fig=plt.subplot(131)
plt.scatter([1,2],[3,4])
fig=plt.subplot(132)
plt.scatter([10,20],[30,40])
fig=plt.subplot(133)
plt.scatter([15,23],[35,43])
plt.show()
Cupitor avatar Apr 07 '13 09:04 Cupitor
Aceptado

Debe utilizar la interfaz OO para matplotlib, en lugar de la interfaz de la máquina de estado. Casi todas las plt.*funciones son envoltorios delgados que básicamente lo hacen gca().*.

plt.subplotdevuelve un axesobjeto. Una vez que tenga una referencia al objeto de ejes, puede trazar directamente sobre él, cambiar sus límites, etc.

import matplotlib.pyplot as plt

ax1 = plt.subplot(131)
ax1.scatter([1, 2], [3, 4])
ax1.set_xlim([0, 5])
ax1.set_ylim([0, 5])


ax2 = plt.subplot(132)
ax2.scatter([1, 2],[3, 4])
ax2.set_xlim([0, 5])
ax2.set_ylim([0, 5])

y así sucesivamente para tantos ejes como quieras.

o mejor, envuélvalo todo en un bucle:

import matplotlib.pyplot as plt

DATA_x = ([1, 2],
          [2, 3],
          [3, 4])

DATA_y = DATA_x[::-1]

XLIMS = [[0, 10]] * 3
YLIMS = [[0, 10]] * 3

for j, (x, y, xlim, ylim) in enumerate(zip(DATA_x, DATA_y, XLIMS, YLIMS)):
    ax = plt.subplot(1, 3, j + 1)
    ax.scatter(x, y)
    ax.set_xlim(xlim)
    ax.set_ylim(ylim)
tacaswell avatar Apr 07 '2013 02:04 tacaswell