Cree un gráfico a partir de un archivo CSV y renderícelo en el navegador con Django y la biblioteca Pandas Python
Estoy aprendiendo cómo 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 usandoPandasy mostrar esos datos al usuario a través de una plantilla de Django. No he tenido ningún problema al crear el gráfico en iPython, pero he tenido problemas para llevarlo a una plantilla HTML Django.
He seguido el siguiente ejemplo dematplotlib
:
# 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 usarPandas
debido a su sintaxis aparentemente simplista y mis intentos 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 llamando al.plot()
muestra bien el gráfico, pero muestra una página en blanco con la plantilla HTML. También he intentado usar Numpy'sgenfromtxt()
yloadtxt()
, pero fue en vano. Además, mis búsquedas en Google tampoco han sido fructíferas.
Cualquier ayuda o sugerencia sería genial. Si conoce una mejor alternativa a Pandas, entonces estoy dispuesto a probar otras opciones.