¿Cómo puedo hacer un trazado de contorno con fecha y hora en el eje xy?

Tengo algunos datos que se parecen a esto:

#date time temp press rh 09/10/2011 07:50 11.4 798.1 14.1 09/10/2011 08:00 11.9 798.3 13.6 ... 09/10/2011 11:30 FALSE FALSE FALSE 09/10/2011 11:40 25.4 798.3 11.2 09/10/2011 11:50 23.2 799.1 11.2 ..... 

Quiero hacer un gráfico de contorno de “temp” con el “tiempo” en el eje x y la “fecha” en el eje y.

Intenté usar Pandas para manejar mejor las fechas y los valores de NaN .

 data=np.genfromtxt("dataFile.txt", comments="#", dtype='str') header_names=['date', 'time', 'temp', 'press', 'rh'] df = pd.DataFrame(data, dtype=None, columns=header_names) df['date']=pd.to_datetime(df['date'], format='%d/%m/%Y').dt.date df.time=pd.to_datetime(df.time, format='%H:%M').dt.time df.temp = pd.to_numeric(df.temp, errors='coerse') .... dfMesh=df.pivot('date', 'time', 'temp') X=dfMesh.columns.values Y=dfMesh.index.values Z=dfMesh.values x,y=np.meshgrid(X, Y) plt.contourf(x, y, Z) 

Pero me sale el siguiente error:

Seguimiento (última llamada más reciente): Archivo “./contourPlot_pandas.py”, línea 33, en x, y = np.meshgrid (X, Y) Archivo “/Users/marybau/anaconda/lib/python3.6/site- packages / numpy / lib / function_base.py “, línea 4533, en meshgrid return [x * mult_fact for x in output] Archivo” /Users/marybau/anaconda/lib/python3.6/site-packages/numpy/lib/function_base .py “, línea 4533, a cambio [x * mult_fact for x in output] TypeError: tipo (s) de operando no compatibles para *: ‘datetime.time’ e ‘int

También he probado otras formas de hacerlo sin usar pandas, pero acabo con problemas similares debido al formato de date-time o al NaN . ¿Alguna sugerencia? ¡Gracias!

Matplotlib Contour necesita convertir los valores de X e Y a flotadores, basándome en una pequeña lectura de donde recibo los mensajes de error. El trazado de contornos es lo suficientemente complicado como para actualizar la fecha y la hora para trazar bien con la función existente es probablemente más fácil que extender el contour .

Convierta los valores de fecha y hora en números que se espaciarán correctamente; por ejemplo, las fechas como enteros de fecha juliana y las horas como minutos desde la medianoche. Comenzando con la creación de datos ficticios y luego reformatearlos:

 import matplotlib.pyplot as plt import pandas as pd from math import pi, sin ts = pd.date_range('1/1/2017 0:00', '1/24/2017 23:00', freq='H') # 24 * 24 long temp = map(lambda x: sin(2*pi*x/40), range(576)) # tiny testcase: sin(2*pi*x/12) or /24 provide horizontal contours: quite right. df = pd.DataFrame({'date':map(lambda x:int(x.to_julian_date()), ts), 'time':map(lambda x:x.time().hour*60 + x.time().minute, ts), 'temp':temp}) dfMesh = df.pivot('time','date','temp') fig, ax = plt.subplots() conts = ax.contour(dfMesh.columns.values, dfMesh.index.values, dfMesh.values) ax.set_xlabel('Julian day') ax.set_ylabel('Minutes since midnight') plt.show() 

introduzca la descripción de la imagen aquí

Eso servirá para investigar sus datos como un gráfico de contorno diurno.

Para hacer que las tags de trazado sean más comprensibles, puede editar las marcas de verificación existentes, o cambiar los lugares donde se colocan los tics y darles a las nuevas marcas las tags de cadena de fecha o de tiempo. Pero esas son preguntas que se manejan en otras partes de SE, al igual que el trazado de contornos con valores perdidos, interpolación, etc.