[PYTHON] Ecrire des graphiques SVG avec matplotlib avec heroku

introduction

J'ai écrit quelque chose de similaire avant, mais encore une fois.

Préparation de l'environnement pyenv

Installez pyenv et pyenv-virtualenv avec homebrew.

$ mkdir qiita-sin
$ cd qiita-sin
$ pyenv virtualenv 2.7.8 qiita-sin
$ pyenv local qiita-sin

Installez les bibliothèques requises et préparez-vous à fonctionner sur Heroku

$ pip install flask
$ pip install gunicorn
$ pip install matplotlib
$ echo python-2.7.8 > runtime.txt
$ pip freeze > requirements.txt
$ echo web: gunicorn app:app --log-file=- > Procfile
$ mkdir templates

Modèle, préparation d'application

modèle

sin.html


<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>test de la courbe de sin</title>
    </head>
    <body>
        <h1>test de la courbe de sin</h1>
        {% autoescape false %}{{svgstr}}{% endautoescape %}
    </body>
</html>

App

app.py


#!/bin/env python
# coding: utf-8

import os
import StringIO

from flask import Flask, render_template
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

app = Flask(__name__)
app.debug = True

@app.route('/')
def do_sin():
    x = np.arange(-np.pi, np.pi, 0.1)
    y = np.sin(x)

    fig = plt.figure()
    plt.plot(x, y, label="sin")
    plt.legend(loc="best")

    strio = StringIO.StringIO()
    fig.savefig(strio, format="svg")
    plt.close(fig)

    strio.seek(0)
    svgstr = strio.buf[strio.buf.find("<svg"):]

    return render_template("sin.html", svgstr=svgstr.decode("utf-8"))

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(port=port)

Déployer

Ajouter à git

$ git init
$ echo .python-version > .gitignore
$ git add .
$ git commit -m "initial commit" .

Déployer sur heroku

$ heroku create
$ git push heroku master

Pause café pendant un moment car il y a compilation de numpy et matplotlib

Achevée

Vérification

$ heroku open

https://limitless-garden-3527.herokuapp.com/ s'ouvre

point

commentaire

Pendant un certain temps, la pile Ceder-14 et https étaient les valeurs par défaut.

Recommended Posts

Ecrire des graphiques SVG avec matplotlib avec heroku
Créer un graphique SVG avec matplotlib avec heroku (affiché en japonais)
Animer plusieurs graphiques avec matplotlib
Écrivez des graphiques en temps réel avec Matplotlib sur le notebook Jupyter
Dessinez le japonais avec matplotlib sur Ubuntu
Comment exécuter matplotlib sur heroku
Dessinez facilement des graphiques avec matplotlib
Écrire un histogramme empilé avec matplotlib
Afficher le graphique japonais avec VS Code + matplotlib
Lancez l'application Flask avec Docker sur Heroku
Dessinez un joli graphique circulaire avec matplotlib
Redis sur Heroku
Conseils de dessin avec matplotlib côté serveur
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
shimehari sur heroku
Animation avec matplotlib
Créez des graphiques 3D interactifs sur Jupyter Lab à l'aide de matplotlib
Japonais avec matplotlib
Animation avec matplotlib
histogramme avec matplotlib
Jusqu'à l'utilisation de PhantomJS avec Python sur Heroku
Faire une animation avec matplotlib
Visualiser grib2 sur une carte avec python (matplotlib)
[Python] Personnalisez la palette de couleurs lors du dessin de graphiques avec matplotlib
Scraping avec Python, publication sur TwitterBot, exécution régulière sur Heroku
(Pour ceux qui ne connaissent pas Matplotlib) Conseils pour dessiner des graphiques avec Seaborn
Graphique 2 axes avec Matplotlib
Graphique étiqueté dans NetworkX
Carte thermique par Python + matplotlib
Graphique de bande avec matplotlib
Apprenez avec Chemo Informatics Matplotlib
Dessin en temps réel avec matplotlib
Différentes barres de couleurs avec Matplotlib
Graphique 3D avec matplotlib
Superposer des graphiques avec sympy
Ajustez les axes avec matplotlib
Traitement de fichiers multiples avec Kivy + Matplotlib + Draw Graph sur GUI
Générez dynamiquement des graphiques avec matplotlib et intégrez-les au PDF avec reporlab
Une histoire que j'ai eu du mal à afficher des graphiques les uns sur les autres avec matplotlib