前言
python的matplotlib的数据可视化非常好用,最近在做信息安全的课设,需要用到可视化的界面,本人想好的是用web做前端,python做后台,那么就可以调用matplotlib的库了,接下来的问题就是将matplotlib画好的图输出给前端了
资料采集
Matplotlib输出中文显示问题 - CSDN博客。能不用中文就不用中文吧,百度翻译一波
代码实现
使用python的flask框架
@app.route("/jianshu")
def jianshu():
import matplotlib
matplotlib.use('Agg') # 不出现画图的框
import matplotlib.pyplot as plt
from io import BytesIO
import base64
# 这段正常画图
plt.axis([0, 5, 0, 20]) # [xmin,xmax,ymin,ymax]对应轴的范围
plt.title('My first plot') # 图名
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') # 图上的点,最后一个参数为显示的模式
# -----------
# 转成图片的步骤
sio = BytesIO()
plt.savefig(sio, format='png')
data = base64.encodebytes(sio.getvalue()).decode()
print(data)
html = '''
<html>
<body>
<img src="https://img-blog.csdnimg.cn/2022010619580627845.png" />
</body>
<html>
'''
plt.close()
# 记得关闭,不然画出来的图是重复的
return html.format(data)
#format的作用是将data填入{}
实验效果
后言
本机运行良好,但是在部署到服务器上却遇到了很大的麻烦
首先是,centos7上是没有GUI界面的,但是matplotlib.pyplot是需要tkinter库的支持的,直接部署上去报一堆问题,不明真相的我,按照报错,去装了一堆包
甚至是
搞得天翻地覆
最后都不知道在百度上搜索什么来解决这个了
问题得到解决
Linux终端没有GUI,如何使用matplotlib绘图
参考他的方法
python文件中:
在 from matplotlib import pylot 之前,添加代码:
如下:
import matplotlib as mpl
mpl.use('Agg')
from matplotlib import pylot