ホームページ  >  記事  >  ウェブフロントエンド  >  Python - matplotlib Figure を HTML に渡す (flask)_html/css_WEB-ITnose

Python - matplotlib Figure を HTML に渡す (flask)_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:20:381936ブラウズ

最近、仕事の都合上、デシジョンツリーで生成されたグラフをhtml上で表示し、専門家が修正できるようにする必要があります。いくつかの落とし穴があるので、ここで記録してください。

R の rpart と scikit-learn のデシジョン ツリーを再度試したところ、結果がビジネス要件と一致していないことがわかりました。そのため、python3 を使用してデシジョン ツリー アルゴリズムを自分で作成することにし、必然的に matplotlib を使用して、決定木。同時に、flask は非常にシンプルな軽量の Web アプリケーションです。最後の質問は、matplotlib によって生成されたグラフをページにアップロードする方法です。

1. matplotlib をインストールします

ローカル Mac に matplotlib をインストールするのは非常に便利ですが、サーバー Linux にインストールするときに、長い間調べた結果、Linux では freetype と libpng が見つからないことがわかりました。 、解決策を見つけました。

freetype をインストールします

wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz

tar zxvf freetype-2.4.10.tar.gz

cd freetype -2.4.10/

./configure

make

sudo make install

libpngをインストールします:

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):

fig = plt.figure(1,figsize=(12,6),facecolor='white' )

....#一連の描画操作

Return fig

flask function:

@app.route('/',methods=['GET']) #パラメータを渡す

defindex (name):

fig=plotTrees(name)

# 画像を Base64 で png にエンコードします

sio = BytesIO()

fig.savefig(sio, format='png')

data=base64 .encodebytes ( sio.getvalue()).decode()

戻り html.format(data)

main 関数:

if __name__ == '__main__':

html = '''

app.run(port=7000 ,debug=True,threaded=False)

3 matplotlibの中国語表示の問題

上記2つの手順が完了すると、実際にWebページに画像が表示されていますが、 matplotlibのデフォルトフォントは中国語をサポートしていないため、中国語の文字はすべて枠になってしまいました。これを解決するには 2 つの方法があります:

1. Mac での成功した解決策:

from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei'] #デフォルトのフォントを指定します

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です。

最後に、非常に簡単な結果を示します:

後で時間があれば、どのパスが間違っているか、どのノードが間違っているかを検査官がフィードバックできるように、対話型関数を追加します。間違っている、葉が間違っていることが判明したなど。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。