Matplotlib在Flask开发环境下的数据可视化绘图实战





一、环境准备

1.准备Flask开发环境

安装包
flask
flask-sqlalchemy
flask-mysqldb
创建flask实例
app = Flask(__name__)
创建蓝图
# -*- coding:utf-8 -*-
# Created by ZhaoWen on 2020/10/11

from flask import Blueprint

matplot_print = Blueprint('matplot_print',__name__)

@matplot_print.route('/mat')
def index():
    return 'Hello Matplotlib !'
注册蓝图
app.register_blueprint(matplot_print,prefix='')

此时我们在控制台查看url映射,就可以看到matplot_print视图已经成功注册到flask主程序中去了

 <Rule '/mat' (OPTIONS, HEAD, GET) -> matplot_print.index>,

此时启动flask应用,访问指定路径已经可以成功访问了

2.准备matplotlib开发环境

pipenv install matplotlib

安装时间比较长,耐心等候



二、数据准备

我们直接使用数据库中的数据

1.ORM映射实体类

class Tbl_Video_Game_Sales(db.Model):
    __tablename__ = 't_video_game_sales'
    Rank = db.Column(db.String(255),primary_key=True)   #销售排名
    Name = db.Column(db.String(255))     #游戏名称
    Platform = db.Column(db.String(255))    #该游戏发布平台
    Year = db.Column(db.Integer)    #发布年份(1980-2016)
    Genre = db.Column(db.String(255))   #游戏类型
    Publisher = db.Column(db.String(255))    #出版公司
    NA_Sales = db.Column(db.DECIMAL(255,2))  #北美区域销量(以百万为单位计数)
    EU_Sales = db.Column(db.DECIMAL(255,2))  #欧美区域销量(以百位为单位计数)
    JP_Sales = db.Column(db.DECIMAL(255,2))  #日本区域销量(以百位为单位计数)
    Other_Sales = db.Column(db.DECIMAL(255,2))   #其他国家销量(以百位为单位计数)
    Global_Sales = db.Column(db.DECIMAL(255,2))   #全球销量(以百位为单位计数)

2.进行简单查询

Tbl_Video_Game_Sales.query.all()[:10]

执行上面那条语句,我们从数据库中获得了十个对象

<Tbl_Video_Game_Sales 1>
<Tbl_Video_Game_Sales 2>
<Tbl_Video_Game_Sales 3>
<Tbl_Video_Game_Sales 4>
<Tbl_Video_Game_Sales 5>
<Tbl_Video_Game_Sales 6>
<Tbl_Video_Game_Sales 7>
<Tbl_Video_Game_Sales 8>
<Tbl_Video_Game_Sales 9>
<Tbl_Video_Game_Sales 10>

执行一个简单的循环遍历,获取到每个对象的名字

Wii Sports
Super Mario Bros.
Mario Kart Wii
Wii Sports Resort
Pokemon Red/Pokemon Blue
Tetris
New Super Mario Bros.
Wii Play
New Super Mario Bros. Wii
Duck Hunt


三、图形实战

2000~2010(不含)之间全球游戏销量最高的前十位

Tbl_Video_Game_Sales.query.filter(Tbl_Video_Game_Sales.Year>2000).filter(Tbl_Video_Game_Sales.Year<2005).order_by(Tbl_Video_Game_Sales.Global_Sales.desc())[:10]

1.柱状图(bar)

2000~2010(不含)之间全球游戏销量最高的前十位
Tbl_Video_Game_Sales.query.filter(Tbl_Video_Game_Sales.Year>2000).filter(Tbl_Video_Game_Sales.Year<2005).order_by(Tbl_Video_Game_Sales.Global_Sales.desc())[:10]
@matplot_print.route('/mat/bar-show')
def bar_show():
    data = Tbl_Video_Game_Sales.query.filter(Tbl_Video_Game_Sales.Year>2000).filter(Tbl_Video_Game_Sales.Year<2005).order_by(Tbl_Video_Game_Sales.Global_Sales.desc())[:10]
    path = 'mat_bar.jpg'
    if os.path.exists(root+path) is False:
        get_bar(data,path)
    return render_template('/matplotlib/bar-chart.html',path=path)


def get_bar(data,path):
    '''
    柱状图
    :param data:
    :return:
    '''
    bar_x = list()
    bar_y = list()
    for d in data:
        bar_x.append(d.Name)
        bar_y.append(d.Global_Sales)

    for x,y in zip(bar_x,bar_y):
        plt.text(x+3, y + 1, '%.2f' % y, ha='center', va='bottom')

    plt.bar(bar_x,bar_y)    # 直角坐标轴 设置颜色
    plt.savefig('.'+root+path)

最终效果
在这里插入图片描述这里因为数据格式问题,x轴的字体挤在一起了,之后进行调整


2.折线图

def get_line(data,path):
    '''
    折线图
    :param data:
    :param path:
    :return:
    '''
    x = [d.Name for d in data] # 横坐标轴
    y = [float(d.Global_Sales) for d in data] # 纵坐标轴
    plt.plot(x,y)
    plt.savefig('.'+root+path)

3.饼图

def get_pie(data,path):
    '''
    饼图
    :param data:
    :param path:
    :return:
    '''
    sizes = [d.Global_Sales for d in data]
    labels = [d.Name for d in data]
    plt.pie(x=sizes,shadow=True,labels=labels)
    plt.title('2000年~2010年游戏全球销量前十')
    # plt.legend(labels) # 图例
    plt.savefig('.'+root+path)

效果
在这里插入图片描述



四、参考资料/扩展阅读

《Python数据可视化编程实战》:https://book.douban.com/subject/26378430/

《matplotlib官方文档》:https://matplotlib.org/users/index.html

Matplotlib教程-莫烦Python:https://www.bilibili.com/video/BV1Jx411L7LU?p=2

数据化雷达图教程:https://www.bilibili.com/video/BV1PQ4y1M7x7?t=4688



五、常见问题

1.图片中文字体乱码或者非正常显示

plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

2.TypeError: ‘list’ object cannot be interpreted as an integer

出现位置:调用numpy.concatenate()方法时报错
问题出现原因:传入参数没有按照concatenate((a1, a2, ...), axis=0, out=None)的格式来,比如我报错的原因就是把theta = np.concatenate((theta, [theta[0]]))错写为theta = np.concatenate(theta, [theta[0]])
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Flask是一个轻量级的Web框架,可以用于开发数据分析可的应用程序。数据分析可是一种通过图表、图形和交互式界面来呈现和解读数据的方法。 使用Flask来构建数据分析可应用程序有以下几个优势。首先,Flask具有简单易用的API和优雅的设计,使得开发者可以快速构建一个简洁可靠的Web应用程序。其次,Flask可以与多种数据分析和可库进行无缝集成,如Matplotlib、Seaborn、Bokeh等,这样开发者可以选择最适合自己需求的库来进行数据处理和图表生成。同时,Flask还支持使用模板引擎来渲染动态页面,使得数据可以实时响应用户的交互和查询。最后,Flask还提供了方便的路由和扩展机制,可以轻松实现多个页面和功能模块的切换和扩展。 在Flask应用程序中,数据分析可可以通过多种方式实现。首先,可以通过路由和图函数来定义不同的页面,并在这些页面上展示数据分析的结果。例如,可以创建一个路由来展示柱状图,另一个路由来展示散点图等。其次,可以使用模板引擎将数据分析的结果动态渲染到HTML页面中,让用户可以实时查看和交互。再者,可以利用Flask的表单功能和数据库集成,实现用户输入数据并对其进行分析和可的功能。最后,还可以通过Flask提供的扩展机制,与其他第三方库进行集成,实现更加复杂和丰富的数据分析可功能。 总之,Flask是一个强大而灵活的框架,可以用于构建数据分析和可的应用程序。通过Flask开发者可以方便地结合数据处理库和可库,构建出丰富多样的数据分析可功能,提供更好的数据展示和解读方式。 ### 回答2: Flask是一个基于Python的轻量级Web框架,它提供了简洁易用的工具和库,用于快速开发Web应用程序。而数据分析可指的是将数据通过图表、图形等形式直观地展示出来,从而更好地理解数据的特征和趋势。 在Flask中进行数据分析可非常方便。首先,可以使用Flask-RESTful扩展简API的开发。通过定义路由、请求方法和传递参数,可以方便地获取前端传递的数据。然后,可以使用Flask的模板引擎(如Jinja2)将获取到的数据传递给前端页面。 在前端页面,可以使用一些优秀的JavaScript图表库(如echarts、highcharts、D3.js等)进行数据的可展示。这些图表库提供了丰富的图表类型,如折线图、柱状图、饼图等,以及交互式操作(如缩放、拖拽等)。通过将数据传递给图表库,我们可以轻松地生成各种图表,从而更好地展示数据的分布、趋势和关系。 此外,Flask还可以结合其他数据分析库,如Pandas和Matplotlib,对数据进行处理和分析。Pandas提供了灵活的数据结构和数据处理功能,可以对数据进行清洗、过滤、聚合等操作。而Matplotlib提供了丰富的绘图函数和样式设置,可以生成各种类型的图表。 综上所述,Flask数据分析可中具有很强的灵活性和易用性。通过使用Flask框架、前端图表库和数据分析库,我们可以快速搭建一个功能强大的数据分析可应用,从而更好地理解和利用数据。 ### 回答3: Flask是一种使用Python编写的轻量级Web应用框架,它提供了一套简洁而灵活的工具,可用于构建数据分析和可的Web应用。 在使用Flask进行数据分析时,我们可以通过调用Python的数据分析库(如Pandas、NumPy等)来处理和分析数据。我们可以通过Flask框架将数据加载到Web应用中,并在前端页面中展示分析结果。例如,我们可以将数据加载到Pandas的数据结构中,进行统计计算、数据清洗等操作,然后将处理后的结果通过Flask传递给前端页面进行展示。 同时,Flask也提供了多种可库(如Matplotlib、Plotly等)的支持,可以将数据分析结果以图表的形式展示出来。我们可以在Flask应用的路由中调用可库的方法,生成各种类型的图表,如折线图、柱状图、饼图等。通过这些图表,我们可以更直观地展示数据分析的结果,帮助用户理解和使用分析结果。 此外,Flask还提供了交互式的功能,可以让用户根据自己的需求进行数据选择和过滤。例如,我们可以在前端页面中添加下拉菜单、滑块等控件,用户可以通过这些控件选择自己想要分析的数据范围,然后Flask可根据用户选择的数据生成新的分析和可结果。通过这种交互式的方式,用户可以更加灵活地使用和探索数据。 总之,通过使用Flask进行数据分析和可,我们可以将复杂的分析任务转为简洁而易懂的网页展示,方便用户进行数据的理解和应用。同时,Flask提供了灵活的交互式功能,让用户可以根据自己的需求进行定制数据分析,提高了数据分析的效率和可操作性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值