Estoy usando diferentes bibliotecas como pandas y numpy para generar un marco de datos, que eventualmente genera un gráfico.
Ahora, necesito mostrar este gráfico en una página web simple que está en HTML.
Nota: También estoy dispuesto a tomar 2-3 entradas del usuario en la página HTML y luego pasar esos datos a mi archivo python. Luego, el archivo python genera un gráfico basado en los datos proporcionados (de la página HTML) y necesito pasar este gráfico a una página HTML.
df[[main_data]].plot()Aquí, main_data es una variable cuyo valor proviene de la página HTML. Y estoy haciendo código python en SPYDER. Y no estoy usando ningún Framework.
Esto depende un poco de lo que quieras decir al mostrar el gráfico como html. Puedo ver un par de formas, la primera y más simple es guardar la figura como PNG y luego proporcionar la ruta al archivo en el html:
código pitón:
import pandas as pd import matplotlib.pyplot as plt s = pd.Series([1, 2, 3]) fig, ax = plt.subplots() s.plot.bar() fig.savefig('my_plot.png')HTML:
<img src='my_plot.png'/>La segunda forma sería codificar la figura como base64. Esto tiene la ventaja de ser portátil y la desventaja de crear archivos html muy grandes y difíciles de manejar. No soy un programador web, por lo que también puede haber otras advertencias de las que no estoy al tanto.
pitón:
import io import base64 def fig_to_base64(fig): img = io.BytesIO() fig.savefig(img, format='png', bbox_inches='tight') img.seek(0) return base64.b64encode(img.getvalue()) encoded = fig_to_base64(fig) my_html = '<img src="data:image/png;base64, {}">'.format(encoded.decode('utf-8')) my_html se puede pasar a su archivo html, o puede inyectarlo con jinja2 o lo que sea que use. Aquí hay una publicación SO sobre la visualización de base64 en html https://stackoverflow.com/a/8499716/3639023 y la codificación de imágenes como base64 ¿Cómo convertir el objeto PIL Image.image a una cadena base64?
La mejor manera de exportar gráficos matplotlib al navegador web es usar la biblioteca mpld3. Aquí está el ejemplo.
import matplotlib.pyplot as plt import numpy as np import pandas as pd import mpld3 from mpld3 import plugins np.random.seed(9615) # generate df N = 100 df = pd.DataFrame((.1 * (np.random.random((N, 5)) - .5)).cumsum(0), columns=['a', 'b', 'c', 'd', 'e'],) # plot line + confidence interval fig, ax = plt.subplots() ax.grid(True, alpha=0.3) for key, val in df.iteritems(): l, = ax.plot(val.index, val.values, label=key) ax.fill_between(val.index, val.values * .5, val.values * 1.5, color=l.get_color(), alpha=.4) # define interactive legend handles, labels = ax.get_legend_handles_labels() # return lines and labels interactive_legend = plugins.InteractiveLegendPlugin(zip(handles, ax.collections), labels, alpha_unsel=0.5, alpha_over=1.5, start_visible=True) plugins.connect(fig, interactive_legend) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('Interactive legend', size=20) mpld3.show()También puedes usar Plotly para eso. Esto proporciona interactive graphs . También puede escribir los datos generados en HTML files, apply bootstrap styling .
Echa un vistazo a este tutorial en su sitio web .