柱状图参考代码:
from flask import Flask, render_template,Response,request import io import random from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure import requests import json from bs4 import BeautifulSoup import pandas as pd import numpy as np app = Flask(__name__) @app.route('/') @app.route('/ClassChart',methods=['get']) def Index(): chartType= request.args.get('chartType') algorithm= request.args.get('algorithm') classNo= request.args.get('classNo') className= request.args.get('className') return render_template('Index.html',chartType=chartType,algorithm=algorithm,classNo=classNo,className,className) def getHtmlText(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding='utf-8' return r.text except: return @app.route('/bar.png') def plot_png(): fig = create_figure() output = io.BytesIO() FigureCanvas(fig).print_png(output) return Response(output.getvalue(), mimetype='image/png') def create_figure(): fig = Figure() axis = fig.add_subplot(1, 1, 1) url='http://www.dshow.net:8801/api/rankdshow/10' html=getHtmlText(url) listRank=list() listDictRank=json.loads(html) listName=list() listResult=list() for item in listDictRank: listName.append(item["PlayerSID"]) listResult.append(item["ResultResult"]) # xs=["zz","bb","cc"] # # ys = [random.randint(1, 50) for x in xs] # ys=[11,8,44] axis.bar(listName, listResult) return fig if __name__ == '__main__': app.run(debug = True)
Index.html代码<待写,未完>:
<h2>柱状图</h2> <div align="center" style="width:1000px;height:500px;border:0px solid #F00"> <p> <img src="/bar.png" alt="my plot"> </p> </div>
直方图参考代码:
from flask import Flask, render_template,Response,request import io import random import matplotlib.pyplot as plt from matplotlib import font_manager from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure import requests import json from bs4 import BeautifulSoup import pandas as pd import numpy as np app = Flask(__name__) @app.route('/') @app.route('/ClassChart',methods=['get']) def Index(): # chartType= request.args.get('chartType') # algorithm= request.args.get('algorithm') # classNo= request.args.get('classNo') # className= request.args.get('className') return render_template('Normal.html') def getHtmlText(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding='utf-8' return r.text except: return def normfun(x, mu, sigma): pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi)) return pdf @app.route('/nor.png') def plot_png(): fig = create_figure() output = io.BytesIO() FigureCanvas(fig).print_png(output) return Response(output.getvalue(), mimetype='image/png') def create_figure(): fig = Figure() axis = fig.add_subplot(1, 1, 1) url='http://www.dshow.net:8801/api/rankdshow/10' html=getHtmlText(url) listRank=list() listDictRank=json.loads(html) listName=list() stuScore=list() for item in listDictRank: listName.append(item["PlayerSID"]) stuScore.append(float(item["ResultResult"])) myfont = font_manager.FontProperties(fname = r"C:\\Windows\\Fonts\\simsun.ttc") x = np.arange(min(stuScore), max(stuScore), 2) print(np.mean(stuScore),np.std(stuScore)) y = normfun(x, np.mean(stuScore), np.std(stuScore)) axis.plot(x, y) # 这里画出理论的正态分布概率曲线 axis.hist(stuScore,bins=10,rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙 axis.set_title("子标题",fontproperties=myfont,fontsize=14) axis.set_xlabel("分数",fontproperties=myfont,fontsize=14) axis.set_ylabel("概率",fontproperties=myfont,fontsize=14) fig.suptitle('直方图',fontproperties=myfont,fontsize=14) return fig if __name__ == '__main__': app.run(debug = True)