基于echarts、php、Mysql开发的数据可视化大屏
大屏效果展示
管理员进入数据可视化页面将看到数据可视化大屏。大屏内容包括两个条形图,用于统计当前网站所有用户的MBTI 16型人格分布;玫瑰图,用于展示当前网站用户MBTI四个维度,八个字母的占比;折线图,用于展示当前网站在交友论坛中周一至周如的发言数量;饼图用于展示当前网站用户的男女比例;中间的文字显示屏用于直观展示用户人数、男女比例、最稀有人格、用户活跃时间的信息。数据可视化大屏如下。
设计大屏之前完成echarts引入
<script src="echarts.js/echarts.min.js"></script>
大屏框架
<div class="whole">
<header><h1>数据可视化大屏</h1>
</header>
<div class="screen"><div class="left_chart"><div class="left_top" id="chart" ></div><div class="left_bottom" id="chart4"></div></div><div class="middle_chart"><div class="middle_top" ><h3 class="tech-display">用<br>户<br>人<br>数<br><?echo $usernum?></h3><h3 class="tech-display">男<br>女<br>比<br>例<br><?echo $male?>:<?echo $female?></h3><h3 class="tech-display">稀<br>有<br>人<br>格<br><?echo $minMBTI?></h3><h3 class="tech-display">活<br>跃<br>时<br>间<br><?echo $maxDAY?></h3></div><div class="middle_bottom" id="chart1"></div></div><div class="right_chart"><div class="right_top" id="chart2" ></div><div class="right_bottom" id="chart3"></div></div>
</div></div>
大屏css样式
.whole{width: 100%;height: 100%;background: rgba(0, 0, 0, 0.5);
}
.screen{display: flex;justify-content: center;margin-top: 5px;}.left_chart{}
.left_top{border: solid;width: 520px;height: 390px;background: #fff;}
.left_bottom{border: solid;width: 520px;height: 400px;margin-top: 10px;background: #fff;
}.middle_chart{margin-left: 20px;
}
.middle_top{border: solid;width: 520px;height: 190px;background: rgba(0, 0, 0, 0.7);color: #fff;font-family: 'Arial', sans-serif;display: flex;justify-content: center;align-items: center;padding-left: 5px;padding-right: 5px;
}
.middle_top h3{margin-left: 10px;width: 100px;text-align: center;
}
.middle_bottom{border: solid;width: 520px;height: 600px;margin-top: 10px;background: #fff;
}.right_chart{margin-left: 20px;
}
.right_top{border: solid;width: 520px;height: 390px;background: #fff;
}
.right_bottom{border: solid;width: 520px;height: 400px;margin-top: 10px;background: #fff;
}header {background: rgba(0, 0, 0, 0.5);color: white;padding: 1rem;text-align: center;}.tech-display {display: inline-block;font-size: 2em;font-weight: bold;color: #007bff;text-shadow: 0 0 2px #007bff, 0 0 40px #007bff, 0 0 60px #007bff, 0 0 0px #007bff;background: linear-gradient(45deg, #007bff, #0033cc);-webkit-background-clip: text;letter-spacing: 10px;transition: all 0.5s ease-in-out;}.tech-display:hover {transform: scale(1.1);text-shadow: 0 0 20px #007bff, 0 0 40px #007bff, 0 0 60px #007bff, 0 0 80px #007bff;}
数据库数据调用
<?require "conn.php";// 获取用户mbti性格数量$sql1 = "select * from user where mbti='INTJ'";$result1 = mysqli_query($conn,$sql1);$INTJ = mysqli_num_rows($result1);$sql2 = "select * from user where mbti='INTP'";$result2 = mysqli_query($conn,$sql2);$INTP = mysqli_num_rows($result2);$sql3 = "select * from user where mbti='ENTJ'";$result3 = mysqli_query($conn,$sql3);$ENTJ = mysqli_num_rows($result3);$sql4 = "select * from user where mbti='ENTP'";$result4 = mysqli_query($conn,$sql4);$ENTP = mysqli_num_rows($result4);$sql5 = "select * from user where mbti='INFJ'";$result5 = mysqli_query($conn,$sql5);$INFJ = mysqli_num_rows($result5);$sql6 = "select * from user where mbti='INFP'";$result6 = mysqli_query($conn,$sql6);$INFP = mysqli_num_rows($result6);$sql7 = "select * from user where mbti='ENFJ'";$result7 = mysqli_query($conn,$sql7);$ENFJ = mysqli_num_rows($result7);$sql8 = "select * from user where mbti='ENFP'";$result8 = mysqli_query($conn,$sql8);$ENFP = mysqli_num_rows($result8);$sql9 = "select * from user where mbti='ISTJ'";$result9 = mysqli_query($conn,$sql9);$ISTJ = mysqli_num_rows($result9);$sql10 = "select * from user where mbti='ISFJ'";$result10 = mysqli_query($conn,$sql10);$ISFJ = mysqli_num_rows($result10);$sql11 = "select * from user where mbti='ESTJ'";$result11 = mysqli_query($conn,$sql11);$ESTJ = mysqli_num_rows($result11);$sql12 = "select * from user where mbti='ESFJ'";$result12 = mysqli_query($conn,$sql12);$ESFJ = mysqli_num_rows($result12);$sql13 = "select * from user where mbti='ISTP'";$result13 = mysqli_query($conn,$sql13);$ISTP = mysqli_num_rows($result13);$sql14 = "select * from user where mbti='ISFP'";$result14 = mysqli_query($conn,$sql14);$ISFP = mysqli_num_rows($result14);$sql15 = "select * from user where mbti='ESTP'";$result15 = mysqli_query($conn,$sql15);$ESTP = mysqli_num_rows($result15);$sql16 = "select * from user where mbti='ESFP'";$result16 = mysqli_query($conn,$sql16);$ESFP = mysqli_num_rows($result16);$array = [$INTJ, $INTP,$ENTJ,$ENTP, $INFJ, $INFP, $ENFJ,$ENFP,$ISTJ, $ISFJ, $ESTJ, $ESFJ, $ISTP, $ISFP, $ESTP, $ESFP];$minValue = min($array);if($INTJ==$minValue){$minMBTI = "INTJ";}if($INTP==$minValue){$minMBTI = "INTP";}if($ENTJ==$minValue){$minMBTI = "ENTJ";}if($ENTP==$minValue){$minMBTI = "ENTP";}if($INFJ==$minValue){$minMBTI = "INFJ";}if($INFP==$minValue){$minMBTI = "INFP";}if($ENFJ==$minValue){$minMBTI = "ENFJ";}if($ENFP==$minValue){$minMBTI = "ENFP";}if($ISTJ==$minValue){$minMBTI = "ISTJ";}if($ISFJ==$minValue){$minMBTI = "ISFJ";}if($ESTJ==$minValue){$minMBTI = "ESTJ";}if($ESFJ==$minValue){$minMBTI = "ESFJ";}if($ISTP==$minValue){$minMBTI = "ISTP";}if($ISFP==$minValue){$minMBTI = "ISFP";}if($ESTP==$minValue){$minMBTI = "ESTP";}if($ESFP==$minValue){$minMBTI = "ESFP";}$sql = "select mbti,sex from user";$result = mysqli_query($conn,$sql); $usernum = mysqli_num_rows($result);$all = "";$allsex = "";while($row = mysqli_fetch_array($result)){list($mbti,$sex) = $row; $all=$all."$mbti";$allsex=$allsex."$sex";}$E = substr_count($all,"E");$I = substr_count($all,"I");$S = substr_count($all,"S");$N = substr_count($all,"N");$T = substr_count($all,"T");$F = substr_count($all,"F");$J = substr_count($all,"J");$P = substr_count($all,"P");$male = substr_count($allsex,"1");$female = substr_count($allsex,"0");//获取周一至周日用户聊天记录数$sqlchat = "select sendtime from comment";$resultchat = mysqli_query($conn,$sqlchat);$MON = 0;$TUE = 0;$WED = 0;$THU = 0;$FRI = 0;$SAT = 0;$SUN = 0;while($rowchat = mysqli_fetch_array($resultchat)){list($week) = $rowchat;$date = date_create_from_format('U', $week);$dayOfWeekEn = date_format($date, 'l');if($dayOfWeekEn=="Monday"){$MON=$MON+1;}if($dayOfWeekEn=="Tuesday"){$TUE=$TUE+1;}if($dayOfWeekEn=="Wednesday"){$WED=$WED+1;}if($dayOfWeekEn=="Thursday"){$THU=$THU+1;}if($dayOfWeekEn=="Friday"){$FRI=$FRI+1;}if($dayOfWeekEn=="Saturday"){$SAT=$SAT+1;}if($dayOfWeekEn=="Sunday"){$SUN=$SUN+1;}}$array1 = [$MON,$TUE,$WED,$THU,$FRI,$SAT,$SUN];$maxValue = max($array1);if($MON==$maxValue){$maxDAY = "周一";}if($TUE==$maxValue){$maxDAY = "周二";}if($WED==$maxValue){$maxDAY = "周三";}if($THU==$maxValue){$maxDAY = "周四";}if($FRI==$maxValue){$maxDAY = "周五";}if($SAT==$maxValue){$maxDAY = "周六";}if($SUN==$maxValue){$maxDAY = "周日";}
?>
可视化大屏图表
<?echo "<script>// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('chart'));var myChart1 = echarts.init(document.getElementById('chart1'));var myChart2 = echarts.init(document.getElementById('chart2'));var myChart3 = echarts.init(document.getElementById('chart3'));var myChart4 = echarts.init(document.getElementById('chart4'));// 指定图表的配置项和数据//柱状图var option = {title : {text: '16性格用户占比(分析家、外交家)',// 设置标题位置,默认居中left: 'center',// 设置标题样式textStyle: {color: '#333',fontSize: 16,fontWeight: 'bold'},},xAxis: {type: 'category',data: [ 'INTJ', 'INTP', 'ENTJ', 'ENTP', 'INFJ', 'INFP', 'ENFJ', 'ENFP']},yAxis: {type: 'value'},series: [{data: [$INTJ, $INTP,$ENTJ,$ENTP, $INFJ, $INFP, $ENFJ,$ENFP],type: 'bar'}]
};var option1 = {title : {text: 'MBTI性格分布(八个性格字母)',// 设置标题位置,默认居中left: 'center',// 设置标题样式textStyle: {color: '#333',fontSize: 16,fontWeight: 'bold'},},legend: {top: 'bottom'},toolbox: {show: true,feature: {mark: { show: true },dataView: { show: true, readOnly: false },restore: { show: true },saveAsImage: { show: true }}},series: [{name: 'Nightingale Chart',type: 'pie',radius: [50, 200],center: ['50%', '50%'],roseType: 'area',itemStyle: {borderRadius: 8},data: [{ value: $E, name: 'E外向型' },{ value: $I, name: 'I内向型' },{ value: $S, name: 'S观察型' },{ value: $N, name: 'N直觉型' },{ value: $T, name: 'T理性型' },{ value: $F, name: 'F感受型' },{ value: $J, name: 'J判断型' },{ value: $P, name: 'P展望型' },]}]
};var option2 = {title : {text: '用户活跃度(论坛发言次数)',// 设置标题位置,默认居中left: 'center',// 设置标题样式textStyle: {color: '#333',fontSize: 16,fontWeight: 'bold'},},xAxis: {type: 'category',data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']},yAxis: {type: 'value'},series: [{data: [$MON,$TUE,$WED,$THU,$FRI,$SAT,$SUN],type: 'line',smooth: true}]
};var option3 = {
title : {text: '用户性别占比',// 设置标题位置,默认居中left: 'center',// 设置标题样式textStyle: {color: '#333',fontSize: 16,fontWeight: 'bold'},},tooltip: {trigger: 'item'},legend: {top: '5%',left: 'center'},series: [{name: 'sex',type: 'pie',radius: ['40%', '70%'],avoidLabelOverlap: false,itemStyle: {borderRadius: 10,borderColor: '#fff',borderWidth: 2},label: {show: false,position: 'center'},emphasis: {label: {show: true,fontSize: 40,fontWeight: 'bold'}},labelLine: {show: false},data: [{ value: $male, name: '男性用户' },{ value: $female, name: '女性用户' },]}]
};let dataAxis = ['ISTJ', 'ISFJ', 'ESTJ', 'ESFJ', 'ISTP', 'ISFP', 'ESTP', 'ESFP'];
// prettier-ignore
let data = [$ISTJ, $ISFJ, $ESTJ, $ESFJ, $ISTP, $ISFP, $ESTP, $ESFP];
let yMax = 500;
let dataShadow = [];
for (let i = 0; i < data.length; i++) {dataShadow.push(yMax);
}
var option4 = {title: {text: '16性格用户占比(守护者、探险家)',// 设置标题位置,默认居中left: 'center',// 设置标题样式textStyle: {color: '#333',fontSize: 16,fontWeight: 'bold'},},xAxis: {data: dataAxis,axisLabel: {inside: true,color: '#000',fontSize: 14,},axisTick: {show: false},axisLine: {show: false},z: 10},yAxis: {axisLine: {show: false},axisTick: {show: false},axisLabel: {color: '#999'}},dataZoom: [{type: 'inside'}],series: [{type: 'bar',showBackground: true,itemStyle: {color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#83bff6' },{ offset: 0.5, color: '#188df0' },{ offset: 1, color: '#188df0' }])},emphasis: {itemStyle: {color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#2378f7' },{ offset: 0.7, color: '#2378f7' },{ offset: 1, color: '#83bff6' }])}},data: data}]
};
// Enable data zoom when user click bar.
const zoomSize = 6;
myChart.on('click', function (params) {console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);myChart.dispatchAction({type: 'dataZoom',startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],endValue:dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]});
});// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);myChart1.setOption(option1);myChart2.setOption(option2);myChart3.setOption(option3);myChart4.setOption(option4);</script>"?>
相关文章:

基于echarts、php、Mysql开发的数据可视化大屏
大屏效果展示 管理员进入数据可视化页面将看到数据可视化大屏。大屏内容包括两个条形图,用于统计当前网站所有用户的MBTI 16型人格分布;玫瑰图,用于展示当前网站用户MBTI四个维度,八个字母的占比;折线图,用…...

Me-and-My-Girlfriend-1
Me-and-My-Girlfriend-1 解题 信息收集 nmap扫描存活主机 我的虚拟机为131 所以发现130为目标靶机。 查看网站,找到可利用点 使用浏览器查看,使用xff伪造本地用户。 注册用户cat,观察url有url_id,改为5,发现alice用户。 将…...
R语言实现GWAS meta分析(1)
1、基于数据集的Meta分析 datafilenamec("data1.txt","data2.txt"), setwd(workdir) library(Metalgwas) a1 name1c() for(i in datafilename){ assign(paste("file",a,sep""),data.table::fread(paste(getwd(),"/","…...

Kafka-代码示例
一、构建开发环境 File > New > Project 选择一个最简单的模板 项目和坐标命名 配置maven路径 添加maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kaf…...
LLVM - 编译器前端-llvm 基本块、指令、函数 的关系
一:基础概念: 在 LLVM 中,基本块、指令和函数是构建中间表示(IR)的核心概念,它们之间有着紧密的关系,首先了解下基本概念。 1. 基本块(Basic Block) 定义:基本块是一个不包含任何跳转指令的线性代码段,执行顺序是从头到尾。每个基本块至少有一个入口和一个出口。特…...

探索人工智能在自然语言处理中的应用
探索人工智能在自然语言处理中的应用 前言1. 机器翻译2. 情感分析3. 智能客服4. 文本生成未来展望 结语 前言 在信息爆炸的时代,自然语言处理(NLP)作为人工智能(AI)的一个重要分支,正以前所未有的速度改变着…...
IFC模型文本的含义
以下代码是一个STEP文件(ISO-10303-21标准),它是一种用于表示产品数据的国际标准。STEP文件通常用于在不同的计算机辅助设计(CAD)系统之间交换数据。下面是对这段代码的逐行解释: HEADER部分: …...
构建高效评奖系统:SpringBoot在教育领域的应用
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生评奖评优管理系统的开发全过程。通过分析学生评奖评优管理系统管理的不足,创建了一个计算机管理学生评奖评优管理系统的方案。文章介绍了学生评奖…...

「二叉树进阶题解:构建、遍历与结构转化全解析」
文章目录 根据二叉树创建字符串思路代码 二叉树的层序遍历思路代码 二叉树的最近公共祖先思路代码 二叉搜索树与双向链表思路代码 从前序与中序遍历序列构造二叉树思路代码 总结 根据二叉树创建字符串 题目: 样例: 可以看见,唯一特殊的就…...
在使用代理IP时,需要注意以下几点:
1. 代理IP的质量和稳定性直接影响爬虫的效果。因此,我们需要定期更新代理IP列表,并筛选出可用的代理IP。 2. 有些代理IP可能存在被目标网站封禁的风险。因此,我们需要合理使用代理IP,避免过度频繁地访问目标网站。 3. 在使用代…...

深入理解Java基础概念的高级应用(1/5)
目录 1. Java内存模型:堆、栈与方法区 示例代码:对象存储位置 2. 类加载器的工作原理 示例代码:自定义类加载器 3. JVM如何执行字节码 字节码指令示例 4. Java基础数据类型的存储与操作 自动装箱与拆箱 示例代码:基础类型…...

高可用HA软件
高可用HA(High Availability)软件在分布式系统架构设计中至关重要,它们能够减少系统停机时间,确保应用程序持久、不间断地提供服务。以下是四款常用的高可用HA软件介绍: Keepalived Keepalived起初是为LVS(…...
《近似线性可分支持向量机的原理推导》 拉格朗日函数 公式解析
本文是将文章《近似线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 公式 9-41 解释: L ( w , b , ξ , α , μ ) 1 2 ∥ w ∥ 2 C ∑ i 1 N ξ i − ∑ i 1 N α i ( y i ( w T x i b ) − ( 1 − ξ …...
9.指针和字符串string类型
指针和字符串string类型 1.指针2.字符串string类型 1.指针 C完全兼容C语言指针,C多出一个this指针 交换两数 #include <iostream>using namespace std;void swap(int *a,int *b){int temp;temp *a;*a *b;*b temp; }int main() {//交换前int a 50;int b …...

八,Linux基础环境搭建(CentOS7)- 安装Mysql和Hive
Linux基础环境搭建(CentOS7)- 安装Mysql和Hive 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Mysql下载及安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Orac…...

海量数据面试题
⭐️前言⭐️ 本篇文章主要针对在面试时可能涉及到的海量数据的面试题,该类型面试题常常考虑通过位图、布隆过滤器或者哈希的方式来解决。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何…...

基于SSM积分商城管理系统的设计与实现(源码+lw+部署文档+讲解等)
前言 伴随着基础网络设施的不断进步和终端电子设备的高度普及,互联网用户规模越来越大。现在人们越来越离不开计算机网络、互联网所带来的好处了,现如今不同的网站系统遍地都是,现在已经不同于以往的传统的管理方式了,只有跟上时代…...
MLP预售开启,革新去中心化通信生态:智能手机与AI Agent齐上阵
2024年10月22日,Matrix Layer Protocol(MLP)宣布其备受期待的第一期产品正式进入预售阶段。随着Web3世界的不断发展,去中心化技术已经深入到我们日常生活的方方面面。作为Web3世界中炙手可热的创新项目,Matrix Layer P…...
js获取浏览器指纹
Canvas指纹法 来源:https://www.cnblogs.com/leijing0607/p/8044218.html 从根本上来说,每一种浏览器都会使用不同的图像处理引擎,不同的导出选项,不同的压缩等级,所以每一台电脑绘制出的图形都会有些许不同…...
乐尚代驾的项目问题
订单状态如果在流转的过程中卡住了,怎么办? 卡住的原因有可能是: 网络问题 网络不稳定或中断可能导致订单状态更新的请求无法及时发送或接收。例如,司机端在更新代驾车辆信息时,如果网络出现故障,可能无法…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...