es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo graficar un punto en una serie de tiempo en python.

Estoy enfrentando un problema al trazar puntos en una serie de tiempo, ya que no puedo identificar el valor del eje y. Tengo 2 conjuntos de datos: un archivo NetCDF con datos satelitales (temperatura de la superficie del mar) y otro archivo CSV con datos de la trayectoria de tormentas (tiempo, longitud, latitud, velocidad del viento, etc.). Puedo trazar la serie de tiempo de temperatura deseada para todas las ubicaciones de la trayectoria de tormentas ubicadas en el océano. Sin embargo, quiero indicar el momento de la ocurrencia de la huella de la tormenta dentro de cada línea de la serie de tiempo. Entonces, una línea representa una ubicación y la temperatura cambiante a lo largo del tiempo, pero también quiero mostrar CUÁNDO ocurrió la tormenta en esa ubicación.

Este es mi código hasta ahora (funciona):

lati = stormtrack_lat.values
loni = stormtrack_lon.values

for i, dummy in enumerate(lati):
    dsloc = SSTskin_file.sel(lon=loni[i], lat=lati[i], method='nearest')
    dsloc['analysed_sst'].plot()
    #plt.plot(dsloc,stormtrack_time[i], "or") #aquí quiero agregar un punto a cada línea que indique el momento en que ocurrió la tormenta en esta ubicación
plt.title('Mi título')
plt.xlabel('tiempo')
plt.ylabel('SST skin en K')

El archivo netcdf contiene los datos de tiempo como coordenada de fecha y hora, pero mi archivo CSV contiene estos datos:

|    da   | INDEX | SIZE  |  AREA     |   x     |  y |  RADIUS   |  MEANV

2020021018  1505    2934    177.363     -2.82   49.87   1782.18     16.18

2020021100  1505    3812    220.078     5.25    49.57   2811.51     16.17
...

donde ‘da’ representa la fecha y hora (YYYYMMDDHH). Entonces, creo que necesito (1) convertir los valores de ‘da’ del CSV en un formato de fecha y hora para usarlos en la línea plt.plot(dsloc,stormtrack_time[i], "or") y luego (2) encontrar esos valores de fecha y hora dentro del archivo netcdf y luego (3) usar ese punto de tiempo para trazar el valor de SST correspondiente/punto de tiempo.

El problema es que no sé CÓMO hacer esto. ¿Alguien puede ayudar?

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes seguir estos pasos:

    1. Convertir los valores CSV “da” al formato de fecha y hora utilizando el método datetime.strptime del módulo datetime. Puedes crear una nueva columna en tu archivo CSV con estos valores convertidos.
    import datetime
    
    df['datetime'] = df['da'].apply(lambda x: datetime.datetime.strptime(str(x), '%Y%m%d%H'))
    
    1. Cargar este archivo CSV actualizado en un DataFrame de Pandas y utilizar la columna de fecha y hora como índice.
    df = pd.read_csv('updated_csv_file.csv', index_col='datetime')
    
    1. Utilizar los valores de fecha y hora de cada fila del DataFrame para encontrar el punto de tiempo correspondiente en tu archivo NetCDF. Puedes hacer esto utilizando el método sel con la coordenada de tiempo del archivo NetCDF.
    storm_times = df.index
    
    for i, dummy in enumerate(lati):
        dsloc = SSTskin_file.sel(lon=loni[i], lat=lati[i], method='nearest')
        dsloc['analysed_sst'].plot()
        for storm_time in storm_times:
            sst_value = dsloc.sel(time=storm_time)['analysed_sst']
            plt.plot(storm_time, sst_value, 'ro')
    
    1. Finalmente, traza los valores SST para cada ubicación y agrega un punto rojo en el momento de ocurrencia de la tormenta para cada ubicación.
    plt.title('Mi título')
    plt.xlabel('tiempo')
    plt.ylabel('SST skin en K')
    

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta.

Comments are closed.