You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django网页展示Matplotlib图形与终端输出?附实现代码

实现Matplotlib图形与模型评估结果的网页展示

下面提供两种简单的实现方案,分别基于轻量的Flask和常用的Django框架,都能直接在网页上呈现你的可视化图形和模型评估数据。

方案一:Flask(快速上手)

Flask是轻量级Web框架,适合快速搭建这类简单展示页面。

1. 安装依赖

先安装所需的包:

pip install flask matplotlib scikit-learn numpy

2. 项目结构

iris_web/
├── app.py
└── templates/
    └── index.html

3. 编写app.py核心代码

修改原有代码,将Matplotlib图形转为base64格式嵌入网页,同时整理模型评估结果:

from flask import Flask, render_template
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier, AdaBoostClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import io
import base64

app = Flask(__name__)

@app.route('/')
def show_results():
    # 加载数据并生成可视化图
    iris = load_iris()
    X = iris.data
    y = iris.target

    plt.figure(figsize=(10, 6))
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
    plt.xlabel('Sepal Length')
    plt.ylabel('Sepal Width')
    plt.title('Iris Veri Seti')
    plt.colorbar(label='Class')

    # 将图转为base64字符串,用于网页嵌入
    img_buf = io.BytesIO()
    plt.savefig(img_buf, format='png')
    img_buf.seek(0)
    img_base64 = base64.b64encode(img_buf.getvalue()).decode('utf-8')
    plt.close()  # 关闭画布释放资源

    # 分割数据并训练模型
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

    classifiers = {
        "Decision Tree": DecisionTreeClassifier(),
        "Random Forest": RandomForestClassifier(),
        "Gradient Boosting": GradientBoostingClassifier(),
        "AdaBoost": AdaBoostClassifier()
    }

    # 整理模型评估结果
    results = []
    for name, clf in classifiers.items():
        clf.fit(X_train_scaled, y_train)
        y_pred = clf.predict(X_test_scaled)
        results.append({
            'name': name,
            'accuracy': f"{accuracy_score(y_test, y_pred):.4f}",
            'precision': f"{precision_score(y_test, y_pred, average='weighted'):.4f}",
            'recall': f"{recall_score(y_test, y_pred, average='weighted'):.4f}",
            'f1': f"{f1_score(y_test, y_pred, average='weighted'):.4f}"
        })

    return render_template('index.html', img_data=img_base64, results=results)

if __name__ == '__main__':
    app.run(debug=True)

4. 编写templates/index.html模板

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Iris Model Sonuçları</title>
    <style>
        .result-table {
            border-collapse: collapse;
            margin-top: 20px;
            width: 80%;
        }
        .result-table th, .result-table td {
            border: 1px solid #ddd;
            padding: 10px;
            text-align: left;
        }
        .result-table th {
            background-color: #f2f2f2;
        }
        img {
            max-width: 100%;
            height: auto;
        }
    </style>
</head>
<body>
    <h1>Iris Veri Seti Görselleştirme</h1>
    <img src="data:image/png;base64,{{ img_data }}" alt="Iris Scatter Plot">
    
    <h2>Sınıflandırma Modeli Performansı</h2>
    <table class="result-table">
        <tr>
            <th>Sınıflandırma Algoritması</th>
            <th>Accuracy</th>
            <th>Precision</th>
            <th>Recall</th>
            <th>F1 Score</th>
        </tr>
        {% for result in results %}
        <tr>
            <td>{{ result.name }}</td>
            <td>{{ result.accuracy }}</td>
            <td>{{ result.precision }}</td>
            <td>{{ result.recall }}</td>
            <td>{{ result.f1 }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

5. 运行项目

执行python app.py,访问http://127.0.0.1:5000就能看到图形和结果。


方案二:Django(适合后续扩展)

如果需要搭建更复杂的Web应用,Django是更合适的选择。

1. 初始化项目

pip install django matplotlib scikit-learn numpy
django-admin startproject iris_django
cd iris_django
python manage.py startapp iris_app

2. 配置项目

在iris_django/settings.py中添加iris_app到INSTALLED_APPS:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'iris_app',  # 添加这一行
]

3. 编写视图(iris_app/views.py)

from django.shortcuts import render
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier, AdaBoostClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import io
import base64

def iris_results(request):
    # 生成可视化图形
    iris = load_iris()
    X = iris.data
    y = iris.target

    plt.figure(figsize=(10, 6))
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
    plt.xlabel('Sepal Length')
    plt.ylabel('Sepal Width')
    plt.title('Iris Veri Seti')
    plt.colorbar(label='Class')

    img_buf = io.BytesIO()
    plt.savefig(img_buf, format='png')
    img_buf.seek(0)
    img_base64 = base64.b64encode(img_buf.getvalue()).decode('utf-8')
    plt.close()

    # 训练模型并整理结果
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

    classifiers = {
        "Decision Tree": DecisionTreeClassifier(),
        "Random Forest": RandomForestClassifier(),
        "Gradient Boosting": GradientBoostingClassifier(),
        "AdaBoost": AdaBoostClassifier()
    }

    results = []
    for name, clf in classifiers.items():
        clf.fit(X_train_scaled, y_train)
        y_pred = clf.predict(X_test_scaled)
        results.append({
            'name': name,
            'accuracy': f"{accuracy_score(y_test, y_pred):.4f}",
            'precision': f"{precision_score(y_test, y_pred, average='weighted'):.4f}",
            'recall': f"{recall_score(y_test, y_pred, average='weighted'):.4f}",
            'f1': f"{f1_score(y_test, y_pred, average='weighted'):.4f}"
        })

    return render(request, 'iris_app/results.html', {'img_data': img_base64, 'results': results})

4. 配置URL

在iris_django/urls.py中添加路由:

from django.contrib import admin
from django.urls import path
from iris_app.views import iris_results

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', iris_results, name='iris_results'),
]

5. 创建模板(iris_app/templates/iris_app/results.html)

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Iris Model Sonuçları</title>
    <style>
        table {
            border-collapse: collapse;
            margin: 20px 0;
            width: 80%;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        th {
            background-color: #4CAF50;
            color: white;
        }
        img {
            max-width: 100%;
            height: auto;
        }
    </style>
</head>
<body>
    <h1>Iris Veri Seti Dağılımı</h1>
    <img src="data:image/png;base64,{{ img_data }}" alt="Iris Scatter Plot">

    <h2>Sınıflandırma Modeli Performansı</h2>
    <table>
        <tr>
            <th>Algoritma Adı</th>
            <th>Accuracy</th>
            <th>Precision</th>
            <th>Recall</th>
            <th>F1 Score</th>
        </tr>
        {% for result in results %}
        <tr>
            <td>{{ result.name }}</td>
            <td>{{ result.accuracy }}</td>
            <td>{{ result.precision }}</td>
            <td>{{ result.recall }}</td>
            <td>{{ result.f1 }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

6. 运行项目

python manage.py runserver

访问http://127.0.0.1:8000即可查看图形和模型评估结果。


内容的提问来源于stack exchange,提问作者Hüseyin Kökşen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:12:09