ホームページ >ウェブフロントエンド >htmlチュートリアル >Python - matplotlib Figure を HTML に渡す (flask)_html/css_WEB-ITnose
最近、仕事の都合上、デシジョンツリーで生成されたグラフをhtml上で表示し、専門家が修正できるようにする必要があります。いくつかの落とし穴があるので、ここで記録してください。
R の rpart と scikit-learn のデシジョン ツリーを再度試したところ、結果がビジネス要件と一致していないことがわかりました。そのため、python3 を使用してデシジョン ツリー アルゴリズムを自分で作成することにし、必然的に matplotlib を使用して、決定木。同時に、flask は非常にシンプルな軽量の Web アプリケーションです。最後の質問は、matplotlib によって生成されたグラフをページにアップロードする方法です。
freetype をインストールします
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gzlibpngをインストールします:tar zxvf freetype-2.4.10.tar.gz
cd freetype -2.4.10/
./configure
make
sudo make install
sudo yum install libpng-devel上記のパッケージをインストールした後は、pip installを使用するだけです。
2.基本フレームワーク
import matplotlibプロット関数:matplotlib.use('Agg') #描画ボックスは表示されません
from flask import Flask
app = Flask(__name__)
from io import BytesIO
import os
import Base64
def LotTree(s):flask function:fig = plt.figure(1,figsize=(12,6),facecolor='white' )
....#一連の描画操作
Return fig
@app.route('/',methods=['GET']) #パラメータを渡すmain 関数:defindex (name):
fig=plotTrees(name)
# 画像を Base64 で png にエンコードします
sio = BytesIO()
fig.savefig(sio, format='png')
data=base64 .encodebytes ( sio.getvalue()).decode()
戻り html.format(data)
if __name__ == '__main__':from pylab import *html = '''
app.run(port=7000 ,debug=True,threaded=False)
3 matplotlibの中国語表示の問題
上記2つの手順が完了すると、実際にWebページに画像が表示されていますが、 matplotlibのデフォルトフォントは中国語をサポートしていないため、中国語の文字はすべて枠になってしまいました。これを解決するには 2 つの方法があります:
1. Mac での成功した解決策:
mpl.rcParams['axes.unicode_minus'] = False #保存された画像にマイナス記号 '-' が四角で表示される問題を解決します
2. Linux ではこの方法では成功しませんでした。長い間調べてもその理由はわかりませんでしたが、幸いにも別の方法があります1) まず、Linux でシステムの中国語フォントの .ttc ファイルを見つけます
fc-list
残念ながらそれが見つかった場合は、 Linux には中国語フォントはありません。問題はありません。コンピュータ上のフォントを「Linux を使用する」にコピーするだけです。Linux 上のフォントは /usr/share/fonts にあります。
2) 次に、matplotlib がこのフォントを使用することを示すコードを Python に追加します。たとえば、私が探しているのは wqy-zenhei/wqy-zenhei.ttc であり、次に
myfont = FontProperties(fname='/usr) を追加します。 / share/fonts/wqy-zenhei/wqy-zenhei.ttc')
その後、すべての図面にフォントを追加する関数に fontproperties=myfont を追加すればOKです。
最後に、非常に簡単な結果を示します:
後で時間があれば、どのパスが間違っているか、どのノードが間違っているかを検査官がフィードバックできるように、対話型関数を追加します。間違っている、葉が間違っていることが判明したなど。