Control de matplotlib que plot está en la parte superior

Me pregunto si hay una manera de controlar qué gráfico se encuentra sobre otros gráficos si uno hace varios gráficos en un eje. Un ejemplo:

introduzca la descripción de la imagen aquí

Como puede ver, la serie verde está en la parte superior de la serie azul, y ambas series están en la parte superior de los puntos negros (que hice con un diagtwig de dispersión). Me gustaría que los puntos negros estén arriba de ambas series (líneas).

Primero hice lo anterior con el siguiente código

plt.plot(series1_x, series1_y) plt.plot(series2_x, series2_y) plt.scatter(series2_x, series2_y) 

Entonces probé lo siguiente

 fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(series1_x, series1_y) ax2 = fig.add_subplot(111) ax2.plot(series2_x, series2_y) ax3 = fig.add_subplot(111) ax3.scatter(series2_x, series2_y) 

Y algunas variaciones sobre eso, pero no hay suerte.

El intercambio alrededor de las funciones de plot tiene un efecto en el que el trazado está en la parte superior, pero no importa dónde coloque la función de scatter , las líneas están encima de los puntos.

NOTA:

Estoy usando Python 3.5 en Windows 10 (este ejemplo), pero sobre todo Python 3.4 en Ubuntu.

NOTA 2:

Sé que esto puede parecer un tema trivial, pero tengo un caso en el que la serie sobre los puntos es tan densa que el color de los puntos se oscurece, y en esos casos necesito que mis lectores vean claramente cuáles son los puntos. Color, por eso necesito los puntos para estar arriba.

Use el zorder kwarg en el que cuanto más bajo esté el zorder, más atrás estará el gráfico, por ejemplo,

 plt.plot(series1_x, series1_y, zorder=1) plt.plot(series2_x, series2_y, zorder=2) plt.scatter(series2_x, series2_y, zorder=3) 

Sí tu puedes. Sólo tiene que utilizar el parámetro zorder . Cuanto más alto sea el valor, más arriba estará la ttwig.

 fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(series1_x, series1_y, zorder=3) ax2 = fig.add_subplot(111) ax2.plot(series2_x, series2_y, zorder=4) ax3 = fig.add_subplot(111) ax3.scatter(series2_x, series2_y, zorder=5) 

Alternativamente, puedes hacer un trazado de líneas y marcadores al mismo tiempo. Incluso puede configurar diferentes colores para la línea y la cara del marcador.

 fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(series1_x, series1_y) ax2 = fig.add_subplot(111) ax2.plot(series2_x, series2_y, '-o', color='b', mfc='k') 

La '-o' establece el estilo de trazado en los marcadores de línea y círculo, color='b' establece el color de la línea en azul y mfc='k' establece el color de la cara del marcador en negro.

Otra solución, además de usar zorder, y que vale la pena conocer: simplemente puede trazar una dispersión de puntos usando el comando plot. Algo parecido a la plot(series2_x, series2_y, ' o') . Tenga en cuenta que la ' o' con un espacio significa que no hay líneas sino puntos de círculo. De esta manera, el orden de trazado en los ejes los coloca en la parte superior.