当前位置:   article > 正文

014、Flask模板在数据可视化中的深度应用_可视化用flask做框架把几个图放在一起

可视化用flask做框架把几个图放在一起

目录

Flask模板在数据可视化中的深度应用

1. Flask模板系统简介

1.1 Jinja2模板语法基础

1.2 Flask中渲染模板

2. 静态图表生成

2.1 使用Matplotlib生成图表

3. 交互式图表:使用Charts.js

3.1 创建柱状图

3.2 创建折线图

4. 高级交互式可视化:使用Plotly

4.1 创建散点图

4.2 创建热力图

5. 高级应用:结合多个图表

6. 数据驱动的动态可视化

7. 数据处理与可视化的结合

8. 结合机器学习的可视化

9. 总结


Flask模板在数据可视化中的深度应用

1. Flask模板系统简介

Flask使用Jinja2作为其模板引擎,这是一个功能强大、灵活且易于使用的模板系统。在数据可视化中,Flask模板系统允许我们将后端的数据处理逻辑与前端的展示逻辑分离,从而实现更清晰的代码结构和更高的可维护性。

1.1 Jinja2模板语法基础

Jinja2使用{{ }}来输出变量,{% %}来编写控制结构。例如:

<h1>{{ title }}</h1>
<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

1.2 Flask中渲染模板

在Flask应用中,我们使用render_template函数来渲染模板:

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5.    data = {
  6.        'title': '数据可视化示例',
  7.        'items': ['图表1', '图表2', '图表3']
  8.   }
  9.    return render_template('index.html', **data)

2. 静态图表生成

首先,我们来看如何使用Flask模板生成静态图表。我们将使用Matplotlib库来生成图表,然后将其嵌入到Flask模板中。

2.1 使用Matplotlib生成图表

  1. import io
  2. import base64
  3. import matplotlib.pyplot as plt
  4. from flask import Flask, render_template
  5. app = Flask(__name__)
  6. def generate_plot():
  7.    plt.figure(figsize=(10, 6))
  8.    plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
  9.    plt.title('示例折线图')
  10.    plt.xlabel('X轴')
  11.    plt.ylabel('Y轴')
  12.    
  13.    img = io.BytesIO()
  14.    plt.savefig(img, format='png')
  15.    img.seek(0)
  16.    plot_url = base64.b64encode(img.getvalue()).decode()
  17.    return plot_url
  18. @app.route('/static-plot')
  19. def static_plot():
  20.    plot_url = generate_plot()
  21.    return render_template('static_plot.html', plot_url=plot_url)

对应的static_plot.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>静态图表示例</title>
  5. </head>
  6. <body>
  7.    <h1>Matplotlib生成的静态图表</h1>
  8.    <img src="data:image/png;base64,{{ plot_url }}">
  9. </body>
  10. </html>

这个例子展示了如何在Flask后端生成图表,然后将其作为base64编码的图像传递给前端模板。这种方法适用于简单的、不需要交互的图表。

3. 交互式图表:使用Charts.js

接下来,我们将探讨如何使用Charts.js库来创建交互式图表。Charts.js是一个流行的JavaScript图表库,它提供了丰富的图表类型和交互选项。

3.1 创建柱状图

  1. from flask import Flask, render_template, jsonify
  2. import random
  3. app = Flask(__name__)
  4. @app.route('/bar-chart')
  5. def bar_chart():
  6.    labels = ['红色', '蓝色', '黄色', '绿色', '紫色']
  7.    values = [random.randint(10, 100) for _ in range(5)]
  8.    return render_template('bar_chart.html', labels=labels, values=values)
  9. @app.route('/update-bar-data')
  10. def update_bar_data():
  11.    values = [random.randint(10, 100) for _ in range(5)]
  12.    return jsonify(values=values)

对应的bar_chart.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>交互式柱状图</title>
  5.    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  6.    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  7. </head>
  8. <body>
  9.    <canvas id="barChart" width="400" height="200"></canvas>
  10.    <button onclick="updateChart()">更新数据</button>
  11.    <script>
  12.    var ctx = document.getElementById('barChart').getContext('2d');
  13.    var myChart = new Chart(ctx, {
  14.        type: 'bar',
  15.        data: {
  16.            labels: {{ labels | tojson }},
  17.            datasets: [{
  18.                label: '颜色数量',
  19.                data: {{ values | tojson }},
  20.                backgroundColor: [
  21.                    'rgba(255, 99, 132, 0.6)',
  22.                    'rgba(54, 162, 235, 0.6)',
  23.                    'rgba(255, 206, 86, 0.6)',
  24.                    'rgba(75, 192, 192, 0.6)',
  25.                    'rgba(153, 102, 255, 0.6)'
  26.               ]
  27.           }]
  28.       },
  29.        options: {
  30.            responsive: true,
  31.            scales: {
  32.                y: {
  33.                    beginAtZero: true
  34.               }
  35.           }
  36.       }
  37.   });
  38.    function updateChart() {
  39.        $.getJSON('/update-bar-data', function(data) {
  40.            myChart.data.datasets[0].data = data.values;
  41.            myChart.update();
  42.       });
  43.   }
  44.    </script>
  45. </body>
  46. </html>

这个例子展示了如何创建一个交互式的柱状图,并通过AJAX请求动态更新数据。用户可以点击"更新数据"按钮来刷新图表,而无需重新加载整个页面。

3.2 创建折线图

接下来,我们来创建一个折线图,展示一段时间内的数据趋势:

  1. from flask import Flask, render_template, jsonify
  2. import random
  3. from datetime import datetime, timedelta
  4. app = Flask(__name__)
  5. def generate_time_series_data(days=30):
  6.    end_date = datetime.now()
  7.    start_date = end_date - timedelta(days=days)
  8.    dates = [(start_date + timedelta(days=i)).strftime('%Y-%m-%d') for i in range(days)]
  9.    values = [random.randint(50, 200) for _ in range(days)]
  10.    return dates, values
  11. @app.route('/line-chart')
  12. def line_chart():
  13.    dates, values = generate_time_series_data()
  14.    return render_template('line_chart.html', dates=dates, values=values)
  15. @app.route('/update-line-data')
  16. def update_line_data():
  17.    _, values = generate_time_series_data()
  18.    return jsonify(values=values)

对应的line_chart.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>交互式折线图</title>
  5.    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  6.    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  7. </head>
  8. <body>
  9.    <canvas id="lineChart" width="800" height="400"></canvas>
  10.    <button onclick="updateChart()">更新数据</button>
  11.    <script>
  12.    var ctx = document.getElementById('lineChart').getContext('2d');
  13.    var myChart = new Chart(ctx, {
  14.        type: 'line',
  15.        data: {
  16.            labels: {{ dates | tojson }},
  17.            datasets: [{
  18.                label: '每日数据',
  19.                data: {{ values | tojson }},
  20.                borderColor: 'rgb(75, 192, 192)',
  21.                tension: 0.1
  22.           }]
  23.       },
  24.        options: {
  25.            responsive: true,
  26.            scales: {
  27.                x: {
  28.                    type: 'time',
  29.                    time: {
  30.                        unit: 'day'
  31.                   }
  32.               },
  33.                y: {
  34.                    beginAtZero: true
  35.               }
  36.           }
  37.       }
  38.   });
  39.    function updateChart() {
  40.        $.getJSON('/update-line-data', function(data) {
  41.            myChart.data.datasets[0].data = data.values;
  42.            myChart.update();
  43.       });
  44.   }
  45.    </script>
  46. </body>
  47. </html>

这个折线图示例展示了如何处理时间序列数据,并使用Charts.js的时间轴功能来正确显示日期。

4. 高级交互式可视化:使用Plotly

Plotly是另一个强大的JavaScript可视化库,它提供了更多的交互性和更复杂的图表类型。让我们使用Plotly创建一个散点图和热力图。

4.1 创建散点图

  1. import plotly
  2. import plotly.graph_objs as go
  3. import pandas as pd
  4. import json
  5. app = Flask(__name__)
  6. @app.route('/scatter-plot')
  7. def scatter_plot():
  8.    # 假设我们有一个包含身高、体重和年龄数据的DataFrame
  9.    df = pd.DataFrame({
  10.        'height': [165, 170, 175, 180, 185, 190],
  11.        'weight': [60, 65, 70, 75, 80, 85],
  12.        'age': [25, 30, 35, 40, 45, 50]
  13.   })
  14.    trace = go.Scatter(
  15.        x=df['height'],
  16.        y=df['weight'],
  17.        mode='markers',
  18.        marker=dict(
  19.            size=df['age'],
  20.            color=df['age'],
  21.            colorscale='Viridis',
  22.            showscale=True
  23.       ),
  24.        text=df['age'],
  25.        hoverinfo='text'
  26.   )
  27.    layout = go.Layout(
  28.        title='身高与体重的关系(气泡大小表示年龄)',
  29.        xaxis=dict(title='身高 (cm)'),
  30.        yaxis=dict(title='体重 (kg)')
  31.   )
  32.    fig = go.Figure(data=[trace], layout=layout)
  33.    graphJSON = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
  34.    return render_template('scatter_plot.html', graphJSON=graphJSON)

对应的scatter_plot.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>Plotly散点图示例</title>
  5.    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  6. </head>
  7. <body>
  8.    <div id="chart" style="width:100%;height:600px;"></div>
  9.    <script>
  10.        var graphs = {{graphJSON | safe}};
  11.        Plotly.newPlot('chart', graphs);
  12.    </script>
  13. </body>
  14. </html>

这个散点图展示了如何使用Plotly创建多维数据可视化,其中点的位置表示身高和体重,而点的大小和颜色表示年龄。

4.2 创建热力图

接下来,让我们创建一个热力图来展示某个城市一周内每小时的温度变化:

  1. import plotly
  2. import plotly.graph_objs as go
  3. import pandas as pd
  4. import numpy as np
  5. import json
  6. app = Flask(__name__)
  7. @app.route('/heatmap')
  8. def heatmap():
  9.    # 生成模拟数据
  10.    hours = 24
  11.    days = 7
  12.    z = np.random.randint(10, 30, size=(days, hours))
  13.    
  14.    data = go.Heatmap(
  15.        z=z,
  16.        x=[f'{i}:00' for i in range(24)],
  17.        y=['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
  18.        colorscale='Viridis'
  19.   )
  20.    layout = go.Layout(
  21.        title='一周温度变化热力图',
  22.        xaxis=dict(title='小时'),
  23.        yaxis=dict(title='星期')
  24.   )
  25.    fig = go.Figure(data=[data], layout=layout)
  26.    graphJSON = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
  27.    return render_template('heatmap.html', graphJSON=graphJSON)

对应的heatmap.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>Plotly热力图示例</title>
  5.    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  6. </head>
  7. <body>
  8.    <div id="chart" style="width:100%;height:600px;"></div>
  9.    <script>
  10.        var graphs = {{graphJSON | safe}};
  11.        Plotly.newPlot('chart', graphs);
  12.    </script>
  13. </body>
  14. </html>

这个热力图展示了如何使用Plotly创建复杂的二维数据可视化,非常适合展示时间序列或矩阵形式的数据。

5. 高级应用:结合多个图表

在实际应用中,我们经常需要在一个页面上展示多个相关的图表。下面我们将创建一个仪表板,同时显示多个图表:

  1. import plotly
  2. import plotly.graph_objs as go
  3. import pandas as pd
  4. import numpy as np
  5. import json
  6. app = Flask(__name__)
  7. def create_bar_chart():
  8.    categories = ['A', 'B', 'C', 'D', 'E']
  9.    values = np.random.randint(10, 100, size=5)
  10.    
  11.    data = go.Bar(x=categories, y=values)
  12.    layout = go.Layout(title='类别分布')
  13.    
  14.    return go.Figure(data=[data], layout=layout)
  15. def create_pie_chart():
  16.    labels = ['产品1', '产品2', '产品3', '产品4']
  17.    values = np.random.randint(100, 1000, size=4)
  18.    
  19.    data = go.Pie(labels=labels, values=values)
  20.    layout = go.Layout(title='产品销售占比')
  21.    
  22.    return go.Figure(data=[data], layout=layout)
  23. def create_line_chart():
  24.    dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='M')
  25.    values = np.cumsum(np.random.randn(12))
  26.    
  27.    data = go.Scatter(x=dates, y=values, mode='lines+markers')
  28.    layout = go.Layout(title='月度趋势')
  29.    
  30.    return go.Figure(data=[data], layout=layout)
  31. @app.route('/dashboard')
  32. def dashboard():
  33.    bar_chart = create_bar_chart()
  34.    pie_chart = create_pie_chart()
  35.    line_chart = create_line_chart()
  36.    
  37.    charts = {
  38.        'bar': json.dumps(bar_chart, cls=plotly.utils.PlotlyJSONEncoder),
  39.        'pie': json.dumps(pie_chart, cls=plotly.utils.PlotlyJSONEncoder),
  40.        'line': json.dumps(line_chart, cls=plotly.utils.PlotlyJSONEncoder)
  41.   }
  42.    
  43.    return render_template('dashboard.html', charts=charts)      

对应的dashboard.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>数据可视化仪表板</title>
  5.    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  6.    <style>
  7.        .chart-container {
  8.            width: 45%;
  9.            height: 400px;
  10.            display: inline-block;
  11.            margin: 10px;
  12.       }
  13.    </style>
  14. </head>
  15. <body>
  16.    <h1>数据可视化仪表板</h1>
  17.    <div class="chart-container" id="bar-chart"></div>
  18.    <div class="chart-container" id="pie-chart"></div>
  19.    <div class="chart-container" id="line-chart"></div>
  20.    <script>
  21.        var barChart = JSON.parse({{ charts.bar | tojson | safe }});
  22.        var pieChart = JSON.parse({{ charts.pie | tojson | safe }});
  23.        var lineChart = JSON.parse({{ charts.line | tojson | safe }});
  24.        Plotly.newPlot('bar-chart', barChart.data, barChart.layout);
  25.        Plotly.newPlot('pie-chart', pieChart.data, pieChart.layout);
  26.        Plotly.newPlot('line-chart', lineChart.data, lineChart.layout);
  27.    </script>
  28. </body>
  29. </html>

这个仪表板示例展示了如何在一个页面中组合多个图表,为用户提供全面的数据概览。

6. 数据驱动的动态可视化

在实际应用中,我们通常需要处理大量实时更新的数据。下面我们将创建一个股票价格实时监控系统,展示如何使用Flask和WebSocket来实现实时数据可视化。

首先,安装必要的库:

pip install flask-socketio

然后,创建以下Python文件:

  1. from flask import Flask, render_template
  2. from flask_socketio import SocketIO
  3. import json
  4. import random
  5. import time
  6. from threading import Thread
  7. app = Flask(__name__)
  8. app.config['SECRET_KEY'] = 'secret!'
  9. socketio = SocketIO(app)
  10. def generate_stock_data():
  11.    stocks = ['AAPL', 'GOOGL', 'MSFT', 'AMZN']
  12.    while True:
  13.        data = {stock: random.randint(100, 200) for stock in stocks}
  14.        socketio.emit('stock_update', json.dumps(data))
  15.        time.sleep(1)
  16. @app.route('/')
  17. def index():
  18.    return render_template('stock_monitor.html')
  19. if __name__ == '__main__':
  20.    Thread(target=generate_stock_data).start()
  21.    socketio.run(app, debug=True)

创建对应的stock_monitor.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>实时股票价格监控</title>
  5.    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  6.    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
  7. </head>
  8. <body>
  9.    <div id="chart" style="width:100%;height:600px;"></div>
  10.    <script>
  11.        var socket = io();
  12.        var time = new Date();
  13.        var trace1 = {x: [time], y: [0], name: 'AAPL', mode: 'lines+markers'};
  14.        var trace2 = {x: [time], y: [0], name: 'GOOGL', mode: 'lines+markers'};
  15.        var trace3 = {x: [time], y: [0], name: 'MSFT', mode: 'lines+markers'};
  16.        var trace4 = {x: [time], y: [0], name: 'AMZN', mode: 'lines+markers'};
  17.        var data = [trace1, trace2, trace3, trace4];
  18.        var layout = {title: '实时股票价格', xaxis: {title: '时间'}, yaxis: {title: '价格'}};
  19.        Plotly.newPlot('chart', data, layout);
  20.        socket.on('stock_update', function(msg) {
  21.            var data = JSON.parse(msg);
  22.            var time = new Date();
  23.            var update = {
  24.                x: [[time], [time], [time], [time]],
  25.                y: [[data.AAPL], [data.GOOGL], [data.MSFT], [data.AMZN]]
  26.           }
  27.            Plotly.extendTraces('chart', update, [0, 1, 2, 3]);
  28.            if(time - data[0].x[0] > 30000) {
  29.                Plotly.relayout('chart', {
  30.                    xaxis: {
  31.                        range: [time - 30000, time]
  32.                   }
  33.               });
  34.           }
  35.       });
  36.    </script>
  37. </body>
  38. </html>

这个示例展示了如何使用Flask-SocketIO创建一个实时更新的股票价格监控系统。服务器每秒生成新的股票价格数据并通过WebSocket发送给客户端,客户端接收数据后实时更新图表。

7. 数据处理与可视化的结合

在实际应用中,我们经常需要对原始数据进行处理后再进行可视化。下面我们将创建一个简单的数据分析和可视化系统,展示如何在Flask中结合数据处理和可视化。

  1. from flask import Flask, render_template, request
  2. import pandas as pd
  3. import plotly
  4. import plotly.express as px
  5. import json
  6. app = Flask(__name__)
  7. @app.route('/', methods=['GET', 'POST'])
  8. def index():
  9.    if request.method == 'POST':
  10.        file = request.files['file']
  11.        if file:
  12.            df = pd.read_csv(file)
  13.            
  14.            # 数据处理
  15.            df['Total'] = df['Quantity'] * df['UnitPrice']
  16.            top_countries = df.groupby('Country')['Total'].sum().nlargest(10).index.tolist()
  17.            df_top = df[df['Country'].isin(top_countries)]
  18.            
  19.            # 创建图表
  20.            fig1 = px.bar(df_top.groupby('Country')['Total'].sum().reset_index(),
  21.                          x='Country', y='Total', title='Top 10 Countries by Sales')
  22.            
  23.            fig2 = px.scatter(df_top, x='Quantity', y='UnitPrice', color='Country',
  24.                              size='Total', hover_data=['Description'],
  25.                              title='Quantity vs Unit Price by Country')
  26.            
  27.            # 将图表转换为JSON
  28.            chart1JSON = json.dumps(fig1, cls=plotly.utils.PlotlyJSONEncoder)
  29.            chart2JSON = json.dumps(fig2, cls=plotly.utils.PlotlyJSONEncoder)
  30.            
  31.            return render_template('analysis.html', chart1JSON=chart1JSON, chart2JSON=chart2JSON)
  32.    
  33.    return render_template('upload.html')

创建upload.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>数据上传</title>
  5. </head>
  6. <body>
  7.    <h1>上传CSV文件进行分析</h1>
  8.    <form method="post" enctype="multipart/form-data">
  9.        <input type="file" name="file" accept=".csv">
  10.        <input type="submit" value="上传并分析">
  11.    </form>
  12. </body>
  13. </html>

创建analysis.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>数据分析结果</title>
  5.    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  6. </head>
  7. <body>
  8.    <h1>数据分析结果</h1>
  9.    <div id="chart1" style="width:100%;height:500px;"></div>
  10.    <div id="chart2" style="width:100%;height:500px;"></div>
  11.    <script>
  12.        var chart1 = JSON.parse({{ chart1JSON | tojson | safe }});
  13.        var chart2 = JSON.parse({{ chart2JSON | tojson | safe }});
  14.        Plotly.newPlot('chart1', chart1.data, chart1.layout);
  15.        Plotly.newPlot('chart2', chart2.data, chart2.layout);
  16.    </script>
  17. </body>
  18. </html>

这个示例展示了如何创建一个简单的数据分析和可视化系统。用户可以上传CSV文件,系统会对数据进行简单的处理,然后创建两个图表:一个柱状图显示销售额最高的10个国家,一个散点图显示数量与单价的关系。

8. 结合机器学习的可视化

最后,让我们探索如何将机器学习模型的结果与数据可视化结合起来。我们将创建一个简单的聚类分析可视化系统。

首先,安装必要的库:

pip install scikit-learn

然后,创建以下Python文件:

  1. from flask import Flask, render_template, request
  2. import pandas as pd
  3. import numpy as np
  4. from sklearn.cluster import KMeans
  5. from sklearn.preprocessing import StandardScaler
  6. import plotly.express as px
  7. import json
  8. app = Flask(__name__)
  9. @app.route('/', methods=['GET', 'POST'])
  10. def index():
  11.    if request.method == 'POST':
  12.        file = request.files['file']
  13.        if file:
  14.            df = pd.read_csv(file)
  15.            
  16.            # 数据预处理
  17.            features = ['Annual Income (k$)', 'Spending Score (1-100)']
  18.            X = df[features]
  19.            scaler = StandardScaler()
  20.            X_scaled = scaler.fit_transform(X)
  21.            
  22.            # 聚类分析
  23.            kmeans = KMeans(n_clusters=5, random_state=42)
  24.            df['Cluster'] = kmeans.fit_predict(X_scaled)
  25.            
  26.            # 创建图表
  27.            fig = px.scatter(df, x='Annual Income (k$)', y='Spending Score (1-100)',
  28.                             color='Cluster', hover_data=['Age', 'Gender'],
  29.                             title='Customer Segmentation')
  30.            
  31.            # 将图表转换为JSON
  32.            chartJSON = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
  33.            
  34.            return render_template('cluster_result.html', chartJSON=chartJSON)
  35.    
  36.    return render_template('upload_for_clustering.html')

创建upload_for_clustering.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>上传数据进行聚类分析</title>
  5. </head>
  6. <body>
  7.    <h1>上传CSV文件进行聚类分析</h1>
  8.    <form method="post" enctype="multipart/form-data">
  9.        <input type="file" name="file" accept=".csv">
  10.        <input type="submit" value="上传并分析">
  11.    </form>
  12. </body>
  13. </html>

创建cluster_result.html模板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.    <title>聚类分析结果</title>
  5.    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  6. </head>
  7. <body>
  8.    <h1>聚类分析结果</h1>
  9.    <div id="chart" style="width:100%;height:600px;"></div>
  10.    <script>
  11.        var chart = JSON.parse({{ chartJSON | tojson | safe }});
  12.        Plotly.newPlot('chart', chart.data, chart.layout);
  13.    </script>
  14. </body>
  15. </html>

这个示例展示了如何创建一个简单的聚类分析可视化系统。用户上传包含客户数据的CSV文件后,系统会使用K-means算法进行聚类分析,然后创建一个散点图来可视化聚类结果。

9. 总结

通过这些详细的示例,我们展示了Flask模板在数据可视化中的多种应用场景:

  1. 基础的静态图表生成

  2. 使用Charts.js创建交互式图表

  3. 使用Plotly创建高级交互式可视化

  4. 创建包含多个图表的仪表板

  5. 实现实时数据的动态可视化

  6. 结合数据处理和可视化

  7. 将机器学习模型的结果可视化

Flask的灵活性使得它能够适应各种数据可视化需求,从简单的静态图表到复杂的交互式可视化,再到实时数据的动态展示。通过合理使用模板系统,我们可以将后端的数据处理逻辑与前端的展示逻辑分离,提高代码的可维护性和可扩展性。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号