Crea un gráfico a partir de un archivo CSV y procesa en el navegador con Django y la biblioteca Pandas Python

Estoy aprendiendo a usar el marco Django para un proyecto de trabajo que permitirá a los usuarios cargar archivos en varios formatos (en este momento solo estoy tratando con archivos CSV), graficar esos datos usando Pandas y mostrar esos datos a la usuario a través de una plantilla Django. No he tenido ningún problema para crear el gráfico en iPython, pero he estado luchando para obtener una plantilla Django HTML.

He seguido el siguiente ejemplo de matplotlib :

 # graph input file from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure from matplotlib.dates import DateFormatter def graph(request): fig = Figure() ax = fig.add_subplot(111) x = [] y = [] now = datetime.datetime.now() delta = datetime.timedelta(days=1) for i in range(10): x.append(now) now += delta y.append(random.randint(0, 1000)) ax.plot_date(x, y, '-') ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d')) fig.autofmt_xdate() canvas = FigureCanvas(fig) response = HttpResponse( content_type = 'image/png') canvas.print_png(response) return response 

El ejemplo anterior funciona muy bien y puedo verlo en una plantilla, pero eso es solo un gráfico con valores codificados.

He intentado usar Pandas debido a su syntax aparentemente simplista y mis bashs en Django son los siguientes:

 # graph input file import pandas as pd from pandas import DataFrame def graph(request): data_df = pd.read_csv("C:/Users/vut46744/Desktop/graphite_project/sampleCSV.csv") data_df = pd.DataFrame(dataArray) data_df.plot() response = HttpResponse( content_type = 'image/png') return response 

En Django, llamar a .plot() muestra la multa del gráfico, pero muestra una página en blanco para la plantilla HTML. También he intentado usar genfromtxt genfromtxt() y loadtxt() , pero sin éxito. Además, mis búsquedas en Google tampoco han sido fructíferas.

Cualquier ayuda o sugerencia sería genial. Si conoces una alternativa mejor a Pandas, estoy dispuesto a probar otras opciones.

No he intentado esto todavía, pero lo atacaría algo así como:

 def graph(request): fig = Figure() ax = fig.add_subplot(111) data_df = pd.read_csv("C:/Users/vut46744/Desktop/graphite_project/sampleCSV.csv") data_df = pd.DataFrame(data_df) data_df.plot(ax=ax) canvas = FigureCanvas(fig) response = HttpResponse(content_type='image/png') canvas.print_png(response) return response 

Gracias a Josha Inglis por indicarme la dirección correcta. Su código con una pequeña modificación hizo el truco.

 # graph input file def graph(request): fig = Figure() ax = fig.add_subplot(111) data_df = pd.read_csv("C:/Users/vut46744/Desktop/graphite_project/sampleCSV.csv") data_df = pd.DataFrame(data_df) data_df.plot(ax=ax) canvas = FigureCanvas(fig) response = HttpResponse( content_type = 'image/png') canvas.print_png(response) return response 

Luego, solo hago coincidir esa vista con una URL y hago referencia a esa URL en una etiqueta de imagen en la plantilla deseada.