nivel matrices lineas libreria graficos graficas graficar dibujar curvas crear coordenadas python matplotlib

matrices - libreria matplotlib python



¿Cómo dibujar líneas verticales en una trama dada en matplotlib? (3)

Dada una representación gráfica de la señal en el tiempo, ¿cómo dibujar líneas que marquen el índice de tiempo correspondiente?

Específicamente, dado un diagrama de señal con índice de tiempo que varía de 0 a 2.6 (s), quiero dibujar líneas rojas verticales que indiquen el índice de tiempo correspondiente para la lista [0.22058956, 0.33088437, 2.20589566] , ¿cómo puedo hacerlo?


La forma estándar de agregar líneas verticales que cubrirán toda la ventana de trazado sin tener que especificar su altura real es plt.axvline

import matplotlib.pyplot as plt plt.axvline(x=0.22058956) plt.axvline(x=0.33088437) plt.axvline(x=2.20589566)

O

xcoords = [0.22058956, 0.33088437, 2.20589566] for xc in xcoords: plt.axvline(x=xc)

Puede usar muchas de las palabras clave disponibles para otros comandos de trazado (por ejemplo, color , linestyle linewidth , linewidth ...). Puede pasar argumentos de palabras clave ymin e ymax si lo desea en ejes corrdinates (por ejemplo, ymin ymin=0.25 , ymax=0.75 cubrirá la mitad central de la gráfica). Hay funciones correspondientes para líneas horizontales ( axhline ) y rectángulos ( axvspan ).


Llamar a axvline en un ciclo, como otros han sugerido, funciona, pero puede ser inconveniente porque

  1. Cada línea es un objeto de trazado separado, lo que hace que las cosas sean muy lentas cuando tienes muchas líneas.
  2. Cuando crea la leyenda, cada línea tiene una nueva entrada, que puede no ser la que desea.

En su lugar, puede usar las siguientes funciones de conveniencia que crean todas las líneas como un único objeto de trazado:

import matplotlib.pyplot as plt import numpy as np def axhlines(ys, **plot_kwargs): """ Draw horizontal lines across plot :param ys: A scalar, list, or 1D array of vertical offsets :param plot_kwargs: Keyword arguments to be passed to plot :return: The plot object corresponding to the lines. """ ys = np.array((ys, ) if np.isscalar(ys) else ys, copy=False) lims = plt.gca().get_xlim() y_points = np.repeat(ys[:, None], repeats=3, axis=1).flatten() x_points = np.repeat(np.array(lims + (np.nan, ))[None, :], repeats=len(ys), axis=0).flatten() plot = plt.plot(x_points, y_points, scalex = False, **plot_kwargs) return plot def axvlines(xs, **plot_kwargs): """ Draw vertical lines on plot :param xs: A scalar, list, or 1D array of horizontal offsets :param plot_kwargs: Keyword arguments to be passed to plot :return: The plot object corresponding to the lines. """ xs = np.array((xs, ) if np.isscalar(xs) else xs, copy=False) lims = plt.gca().get_ylim() x_points = np.repeat(xs[:, None], repeats=3, axis=1).flatten() y_points = np.repeat(np.array(lims + (np.nan, ))[None, :], repeats=len(xs), axis=0).flatten() plot = plt.plot(x_points, y_points, scaley = False, **plot_kwargs) return plot


Para líneas múltiples

xposition = [0.3, 0.4, 0.45] for xc in xposition: plt.axvline(x=xc, color=''k'', linestyle=''--'')