django 和 pyecharts实现可视化大屏(完整代码)

1.配置settings文件

(1)注意:需要先创建app(djnago-admin startapp app名称)

(2)配置模板文件

        'DIRS': [os.path.join(BASE_DIR, 'templates')],

(3)配置静态文件(这里我由于存放清洗好的需要进行可视化的文件)

STATIC_URL = 'static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')
]

2.配置主路由(path后面的为“”表示默认,假设有多个会直接跳转到默认的)

urlpatterns = [path('', include(('pro.urls', 'pro'), namespace='pro')),
]

3.app中的views文件

import pandas as pd
from django.shortcuts import HttpResponse, render, redirect
from pyecharts.charts import Page, Map3D, Pie, Line, Timeline, Radar
from pyecharts.components import Table
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ChartType
from django.contrib import auth, messages
from django.contrib.auth.models import Userdata = pd.read_csv('static/data/更新后的水质.csv')
data = pd.DataFrame(data)fn = """function(params) {if(params.name == '其他')return '\\n\\n\\n' + params.name + ' : ' + params.value + '%';return params.name + ' : ' + params.value + '%';}"""def new_label_opts():return opts.LabelOpts(formatter=JsCode(fn), position="center")def map_pro(request):# 2. 统计每个省份的水质类别总数province_counts = data.groupby('省份')['水质类别'].count().reset_index()province_counts['水质类别'] = province_counts['水质类别'].astype(int)# 3. 提取每个省份的第一个经纬度province_coords = data.groupby('省份').first()[['实测经度', '实测纬度']].reset_index()# 使用 merge 函数将两个 DataFrame 合并merged_data = pd.merge(province_counts, province_coords, on='省份')# 使用 apply 函数对每一行进行操作,转换为所需格式converted_data = merged_data.apply(lambda row: (row['省份'], [row['实测经度'], row['实测纬度'], row['水质类别']]),axis=1).tolist()print(converted_data)# 打印转换后的数据for item in converted_data:print(item)# 4. 绘制3D地图c = (Map3D(init_opts=opts.InitOpts(width="100%")).add_schema(itemstyle_opts=opts.ItemStyleOpts(color="rgb(5,101,123)",opacity=1,border_width=0.8,border_color="rgb(62,215,213)",),map3d_label=opts.Map3DLabelOpts(is_show=False,formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),),emphasis_label_opts=opts.LabelOpts(is_show=False,color="#fff",font_size=10,background_color="rgba(0,23,11,0)",),light_opts=opts.Map3DLightOpts(main_color="#fff",main_intensity=1.2,main_shadow_quality="high",is_main_shadow=False,main_beta=10,ambient_intensity=0.3,),).add(series_name="质量分布情况",data_pair=converted_data,type_=ChartType.SCATTER3D,bar_size=1,shading="lambert",label_opts=opts.LabelOpts(is_show=False,formatter=JsCode("function(data){return data.name + ' ' + data.value[2];}"),),).set_global_opts(visualmap_opts=opts.VisualMapOpts(is_show=False, max_=700),legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color='#ededed'))))return HttpResponse(c.render_embed())def pie_pro(request):water_type = data.groupby('水质类别').size().reset_index(name='数量')water_sum = sum(water_type['数量'])print(water_type['水质类别'][4], water_type['数量'][4])# for index, row in water_type[['水质类别', '数量']].iterrows():#     lis_col.append([row['水质类别'], '其他'])#     lis_other.append([row['数量'], water_sum])p = (Pie(init_opts=opts.InitOpts(width="100%")).add("",[list(z) for z in zip(water_type['水质类别'][:3], water_type['数量'][:3])],center=["20%", "30%"],radius=[28, 40],).add("",[list(z) for z in zip([water_type['水质类别'][4], "其他"], [int(water_type['数量'][4]), water_sum])],center=["38%", "30%"],radius=[28, 40],label_opts=new_label_opts(),).add("",[list(z) for z in zip([water_type['水质类别'][3], "其他"], [int(water_type['数量'][3]), water_sum])],center=["56%", "30%"],radius=[28, 40],label_opts=new_label_opts(),).set_global_opts(title_opts=opts.TitleOpts(title="水质类别占比", pos_top='20px', pos_left='20px',title_textstyle_opts=opts.TextStyleOpts(color='#FFF', font_size=16)),legend_opts=opts.LegendOpts(type_="scroll", pos_top="20%", pos_left="80%", orient="vertical", is_show=False,textstyle_opts=opts.TextStyleOpts(color='#FFF')),).set_series_opts(label_opts=opts.LabelOpts(color='#FFF'))# .render('templates/pie.html'))return HttpResponse(p.render_embed())def line_pro(request):grouped_data = data.groupby(['省份', '监测时间', '水质类别']).size().reset_index(name='数量')# 将监测时间的类型更改为日期时间类型grouped_data['监测时间'] = pd.to_datetime(grouped_data['监测时间'])# 格式化日期时间为年份和月份,并存储到新的列中grouped_data['年月'] = grouped_data['监测时间'].dt.strftime('%Y-%m')# 获取时间列表dates = grouped_data['年月'].unique()# 创建时间轴组件timeline = Timeline(init_opts=opts.InitOpts(width='350px', height='290px'))for date in dates:# 获取该时间点的数据data_by_date = grouped_data[grouped_data['年月'] == date]# 创建折线图line_chart = Line()# 添加四种水质类别的数据for water_type in ['一类', '二类', '三类', '四类']:water_data = data_by_date[data_by_date['水质类别'] == water_type]line_chart.add_xaxis(water_data['省份'].tolist())line_chart.add_yaxis(water_type, water_data['数量'].tolist(), is_smooth=True, linestyle_opts={'normal': {'width': 3,'shadowColor': '#696969','shadowBlur': 10,'shadowOffsetY': 10,'shadowOffsetx': 10,'curve': 10}})line_chart.set_global_opts(title_opts=opts.TitleOpts(title="水质类别数量随时间变化"),xaxis_opts=opts.AxisOpts(type_="category"),yaxis_opts=opts.AxisOpts(type_="value"),)line_chart.set_global_opts(title_opts=opts.TitleOpts(title='各类监测水质时间',title_textstyle_opts=opts.TextStyleOpts(color='#FFF',font_size=16),pos_left='left'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=True, color="pink")),yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color='#F37282', is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dashed',color='#F37282')),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#FFFFFF'))),tooltip_opts=opts.TooltipOpts(axis_pointer_type='shadow'),legend_opts=opts.LegendOpts(pos_top='30px',textstyle_opts=opts.TextStyleOpts(color='#FFF')))line_chart.set_series_opts(label_opts=opts.LabelOpts(color="#3CA6DE"))# 将折线图添加到时间轴组件中timeline.add(line_chart, date)timeline.add_schema(# axis_type='time',  # axis_type表示时间轴类型,值可以是value(连续数值型)、category(离散型)、time(时间),如果是time,程序会自动计算时间间隔选择合适的显示格式play_interval=1000,  # 表示播放的速度(跳动的间隔),单位毫秒(ms)is_auto_play=True,  # 设置自动播放is_timeline_show=True,  # 不展示时间组件的轴width='310px',pos_left='1px',is_loop_play=True  # 是否循环播放)return HttpResponse(timeline.render_embed())def table_pro(request):# 创建 Table 组件实例table = Table()# 从数据中筛选出水质类别为“劣四类”的行low_four = data[data['水质类别'] == '劣四类']# 对省份进行分组,并求劣四类数量的总和low_four_sum = low_four.groupby(['省份', '海区']).agg({'水质类别': 'count', 'pH': 'sum'}).reset_index()# 按照劣四类数量的总和对省份进行降序排序low_four_sum = low_four_sum.sort_values(by='水质类别', ascending=False)low_four_sum = low_four_sum.rename(columns={'水质类别': '水质-劣四类'})# 将数据转换为二维数组形式rows = low_four_sum.values.tolist()# 添加table.add(headers=low_four_sum.columns.tolist(), rows=rows,attributes={'align': 'left',"style": "color:#3CA6DE;width:350px;height:500px; ""font-size: 16px; padding:10px;text-align:center;border-collapse: collapse;"})# 设置全局配置table.set_global_opts({'title': '重点关注劣四类水资源', 'title_style': "style='color:#FFF';style='font-size:30px'"},)# table.render('templates/table.html')return HttpResponse(table.render_embed())def radar_pro(request):sum_time = data.groupby(['省份', '监测时间']).size().reset_index(name='总数')# 提取省份和监测时间数据provinces = sum_time['省份'].unique()times = sum_time['监测时间'].unique()# 创建雷达图实例radar = Radar(init_opts=opts.InitOpts(width='330px', height='500px'))# 添加雷达图的 schema,将时间作为标签radar.add_schema(schema=[opts.RadarIndicatorItem(name=time, max_=sum_time[sum_time['省份'] == time]['总数'].max()) for time in provinces],splitarea_opt=opts.SplitAreaOpts(is_show=False),  # 不显示分割区域)# 添加数据到雷达图color_list = ['#FF4500', '#4169E1', '#32CD32', '#FFD700', '#BA55D3', '#4682B4', '#FFA07A', '#87CEEB', '#20B2AA','#FF69B4']  # 颜色列表for i, province in enumerate(times):province_data = sum_time[sum_time['监测时间'] == province]['总数'].tolist()color = color_list[i % len(color_list)]  # 循环使用颜色列表radar.add(series_name=province,  # 省份作为标签data=[province_data],linestyle_opts=opts.LineStyleOpts(width=2),areastyle_opts=opts.AreaStyleOpts(opacity=0.2),color=color,)# 设置雷达图全局配置radar.set_global_opts(title_opts=opts.TitleOpts(title="水质量分布情况",title_textstyle_opts=opts.TextStyleOpts(color='#FFF', font_size=16)),legend_opts=opts.LegendOpts(pos_top='35px', textstyle_opts=opts.TextStyleOpts(color="#FFF")))radar.set_series_opts(label_opts=opts.LabelOpts(color='#3CA6DE'), linestyle_opts=opts.LineStyleOpts(color='pink'))return HttpResponse(radar.render_embed())def pic_all(request):return render(request, 'index.html')def login(request):if request.method == "GET":return render(request, "login.html")if request.method == "POST":username = request.POST.get("username")password = request.POST.get("password")print(username, password, 11111)# 必须同时传入账户和密码user = auth.authenticate(username=username, password=password)# 验证if user:print('a')auth.login(request, user)return redirect("pro:looking")else:messages.add_message(request, messages.WARNING, "用户名或密码错误")return render(request, "login.html", locals())return render(request, "login.html")

4.查看效果图

有其他问题可私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑屏幕花屏怎么办?5个方法解决问题!

“我刚刚打开电脑就发现我的电脑屏幕出现了花屏的情况。这让我很困惑,我应该怎么解决这个问题呢?求帮助。” 在这个数字时代的浪潮中,电脑早已成为我们生活中不可或缺的一部分。然而,当你正沉浸在紧张的游戏对战中,或是…

【ARM】Ulink不同的系列对于芯片的支持和可以支持keil软件

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解不同版本的ULINK可以支持的芯片架构,和ULINK可以和哪个系列的keil软件进行在线调试 2、 问题场景 用于了解不同ULINK仿真器对于芯片的支持是不一样的,并不是ULINK可以支持所有的keil软件…

基于Python的求职招聘管理系统【附源码】

摘 要 随着互联网技术的不断发展,人类的生活已经逐渐离不开网络了,在未来的社会中,人类的生活与工作都离不开数字化、网络化、电子化与虚拟化的数字技术。从互联网的发展历史、当前的应用现状和发展趋势来看,我们完全可以肯定&…

Linux命令之文件操作

文件拷贝:cp命令 概述 该命令的形式如下,其将源文件复制到指定目的地下。当有多个源文件时,目的地为目录文件 登录后复制 cp [option] source dest cp [option] source ... dest_directory 1.2. 常见可选参数option如下: -r: 递归…

免费分享:中国1:250万地质图(附下载方法)

中国1:250万地质图反映了中国区域地质构造面貌和基本特征,表示了中国区域地质的特色,地质编图的标准化程度较高,地质图的编制过程中充分采用了信息技术,反映了地质调查与科研的若干新进展与认识。 数据简介 本数据为空…

多业态、多品牌企业,如何实现积分通积通兑?(附大会员方案)

2021年,龙湖升级珑珠为全业态通用积分,招商荟深度接入招商蛇口大会员体系建设;2022年,华润置地大会员“万象星”正式上线;2023年,“蒙牛生活家会员中心”全新上线…… 越来越多地产、零售等行业的集团品牌…

Day34:LeedCode 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:int…

使用matlab开发stm32总结,stm32-matlab常见的问题处理以及报错合集

1, 问题:本来是好的,突然编译运行报错,说是确少包, 解决方案:重启以后好了 2,有完美的马鞍波,为什么不能够转动呢? 原因是我这里模型的问题,我计算出来的是占…

windows 10 安装tcping 使用教程

1 官网下载:tcping下载 2 复制tcping 到win10系统目录C:\Windows\System32 3 tcping 网址测试,可以指定端口 4 tcping 测试端口联通 5 tcping http模式

【权威主办|检索稳定】2024年法律、教育与社会发展国际会议 (LESD 2024)

2024年法律、教育与社会发展国际会议 (LESD 2024) International Conference on Law, Education and Social Development in 2024 【重要信息】 大会地点:成都 官网地址:http://www.iclesd.com 投稿邮箱:iclesdsub-conf.com 【注意&#xff1…

抖音外卖服务商入驻流程及费用有哪几种?申请不通过怎么办?

随着多家互联网大厂布局的不断深入,本地生活的市场前景和收益潜力逐渐展现了在人们眼前,连带着其重点板块之一的外卖市场也成为了众多资本和创业者的重点关注对象。在此背景下,抖音外卖的正式开放,更是将本就火热的本地生活和外卖…

Hi3861 OpenHarmony嵌入式应用入门--LiteOS semaphore作为锁

CMSIS 2.0 接口中的 Semaphore(信号量)是用于嵌入式系统中多线程或中断服务例程(ISR)之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器,用于跟踪可…

26.4 Django 视图层

1. 视图函数 视图函数是Django框架中用于处理Web请求并返回Web响应的重要组件. 以下是对Django视图函数的详细解释: * 1. 视图函数与URL的映射.为了让Django能够知道哪个URL对应哪个视图函数, 需要在应用的urls.py文件中定义URL模式.使用path或re_path函数来定义URL模式, 并将…

线稿一键转真人,comfyui工作流分享!

大家好!我是极客菌 在数字艺术和图像处理的新时代,技术的进步不断拓宽着创意的边界。ComfyUI 提供了一套高效、易用的工作流,通过简单的节点操作即可实现从线稿到真人图像的转换。 这一技术不仅简化了创作流程,还极大地提升了图像…

深入解读一下 `com.google.android.material.appbar.CollapsingToolbarLayout`

简介 在现代 Android 应用中,提供流畅且美观的用户体验是非常重要的。CollapsingToolbarLayout 是 AndroidX库中 Material Components 的一部分,它提供了一种易于实现的可折叠工具栏效果,常用于提供视觉吸引力的标题栏和动画效果。 本文将详…

避开常见的坑,快速制作一个免费、交互式景区导游地图

目录 1 前言 2 注册登录 3 增加景区,注意设置地图中心点和级别 3.1 确定地图位置和缩放级别 3.2 新增景区,输入几个文本项目 3.3 可以继续调整地图位置和级别 4 增加景点 4.1 点击景点跳转错误 5 新增景区和景点介绍帖子,需要催一下…

【PyTorch】【机器学习】图片张量、通道分解合成和裁剪

一、导入所需库 from PIL import Image import torch import numpy as np import matplotlib.pyplot as plt二、读取图片 pic np.array(Image.open(venice-boat.jpg))上述代码解释:先用Image.open()方法读取jpg格式图片,再用np.array()方法将图片转成…

各大广告商竞相厮杀下,诞生了一个偏门的副业方式

前段时间,想买摩托车,但是媳妇不让买,所以我打算偷偷买,然后萌生了去摆摊赚钱的想法,但是还没有实施就在网上接触到了“某赚”APP,于是一发不可收拾,用我的话来说,我做的不是副业&am…

Map-JAVA面试常问

1.HashMap底层实现 底层实现在jdk1.7和jdk1.8是不一样的 jdk1.7采用数组加链表的方式实现 jdk1.8采用数组加链表或者红黑树实现 HashMap中每个元素称之为一个哈希桶(bucket),哈希桶包含的内容有以下4项 hash值(哈希函数计算出来的值) Key value next(…

超简单的nodejs使用log4js保存日志到本地(可直接复制使用)

引入依赖 npm install log4js 新建配置文件logUtil.js const log4js require(log4js);// 日志配置 log4js.configure({appenders: {// 控制台输出consoleAppender: { type: console },// 文件输出fileAppender: {type: dateFile,filename: ./logs/default, //日志文件的存…