Matplotlib Candlestick (intradía) gráfico es una gran mancha

Estoy tratando de trazar un gráfico de Candelabro utilizando Matplotlib con los datos que estoy adquiriendo para una llamada a la API REST. Sin embargo, dado que la llamada utiliza un token de acceso único, descargué una muestra de datos y la cargué en un csv para esta pregunta. Aquí hay un enlace de pastebin a cómo se ven los datos de muestra. Para procesar los datos dentro de Python, estoy usando Pandas para crear marcos de datos. Aquí es como se ve mi código:

import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as mticker import matplotlib.dates as mdates from matplotlib.finance import candlestick_ohlc from datetime import date """ Pandas """ historic_df = pd.read_csv("sample_data.csv") dates = pd.to_datetime(historic_df['time'], format="%Y-%m-%dT%H:%M:%S.%fZ") openp = historic_df['openAsk'] highp = historic_df['highAsk'] lowp = historic_df['lowAsk'] closep = historic_df['closeAsk'] """ Matplotlib """ ax1 = plt.subplot2grid((1,1), (0,0)) ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S')) x = 0 ohlc = [] while x < len(dates): d = mdates.date2num(dates[x]) append_me = d, openp.values[x], highp.values[x], lowp.values[x], closep.values[x] ohlc.append(append_me) x += 1 candlestick_ohlc(ax1, ohlc, width=0.4, colorup='#77d879', colordown='#db3f3f') plt.show() 

Y aquí es cómo se ve mi salida:

introduzca la descripción de la imagen aquí

Puedes distinguir las líneas verticales de las velas, pero las barras parecen muy anchas. ¿Alguna idea sobre cómo puedo resolver esto? Gracias.

Solo cambia tu ancho en la tabla y estará bien:

candlestick_ohlc(ax1, ohlc, width=0.001, colorup='#77d879', colordown='#db3f3f')

Probado utilizando sus datos y se ve bien.

Parece que el argumento de width no documentado para candlestick_ohlc es la clave. Multiplíquelo por la fracción de un día entre cada uno de sus puntos de datos. Ya que sus datos están en incrementos de minutos, esto debería hacer:

 candlestick_ohlc(ax, tuples, width=.6/(24*60), colorup='g', alpha =.4); 

Para automatizar, use la diferencia entre fechas de puntos de datos sucesivos. Por ejemplo:

 width=0.6/(mdates.date2num(dates[1])-mdates.date2num(dates[0])) 

Tenga en cuenta que esto resulta ser una pregunta frecuente, aunque los enlaces no son obvios. Ver:

  • Gráficos de Candlestick_OHLC barras de un minuto con Pandas y Matplotlib
  • El gráfico de las velas de Python Matplotlib funciona solo en datos diarios, no para intradía
  • Candelabro de matplotlib en minutos.