#環境
Python 3.6.0
Heroku
Flask
##困っていること
matplotlibを用いて、二種類のグラフ(線グラフと円グラフ)を別々に作りました。
しかし、そこで得た2つのグラフを並べてみると、後に作られた円グラフが線グラフの設定を引きずっているではありませんか。
どうにかこうにかしてみたものの、解決できずにハゲそうになっています。
原因は多分、同じタイミングでpltを使っているからだと思いますが、、、
解決策のご教授をよろしくおねがいいたします・・・。
##plot.py(オリジナル)
ちょっとぐちゃぐちゃしてますが、上の関数が線グラフ、下の関数が円グラフです
python
1from flask import Flask,send_file 2from matplotlib import pyplot as plt 3from matplotlib.font_manager import FontProperties 4import numpy as np 5import random 6from io import BytesIO 7 8class Image: 9 def generate_img(image): 10 plt.savefig(image, format='png') 11 image.seek(0) 12 return send_file(image,attachment_filename="hoge.png",as_attachment=True) 13 #↑こいつをflaskのmain.pyでうけとって、<img src="">に使ってる 14 15def line_graph(): 16 data = [i*i**2*random.randint(100,900) for i in range(10)] 17 plt.figure(figsize=(7,5))#グラフの縦横比 18 colors=['#DDB6CC','#A4C0D1','#BAC384','#DFD09D','#C56B3F','#A5908B'] 19 plt.plot(data,'-o',label="ラベル",color=colors[0]) 20 plt.axhline(y=random.randint(100000,300000),lw=1,color='#098765') # x軸に平行に引く,lw=太さ 21 plt.axvline(x=random.randint(1,10),lw=1,color='#123456') # y軸に平行に引く,lw=太さ 22 fp = FontProperties(fname=r'Arial Unicode.ttf', size=12) 23 plt.xticks(range(0,random.randint(10,20))) # x軸メモリの範囲 24 #plt.yticks(range(0,100)) # y軸メモリの範囲 25 plt.xlabel("x軸のラベル",fontproperties=fp) 26 plt.ylabel("y軸のラベル",fontproperties=fp) 27 plt.legend(loc="best",prop=fp)#凡例 28 plt.title("サンプルグラフ",fontproperties=fp) 29 #グラフをオブジェクトに保管 30 image = BytesIO() 31 return Image.generate_img(image) 32 33def circle_graph(): 34 data = np.array([100, 200, 300, 400, 500]) 35 label = ["Apple", "Banana", "Orange", "Grape", "Strawberry"] 36 colors2 = ["0.1", "0.3", "0.5", "0.7", "0.9"] 37 plt.pie(data, labels=label, counterclock=False, startangle=90,colors=colors2) 38 plt.axis('equal') # 楕円になるのを防ぐおまじない 39 #グラフをオブジェクトに保管 40 image = BytesIO() 41 return Image.generate_img(image)
##Flaskのmain.py
python
1from flask import Flask,render_template,send_file 2import os 3import plot # オリジナル 4 5app = Flask(__name__) 6 7@app.route("/") 8def main(): 9 image = "sample.png" 10 image2 = "sample_circle.png" 11 return render_template("index.html",image=image,image2=image2) 12 13@app.route("/sample.png") 14def img(): 15 return plot.line_graph() 16 17@app.route("/sample_circle.png") 18def sircle(): 19 return plot.circle_graph() 20 21if __name__ == "__main__": 22 app.run(debug=True)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/13 10:31
2017/04/13 10:58
2017/04/13 11:46