• SpringBoot+ECharts+Html 字符云/词云案例详解


    1. 技术点

     SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等

    2. 准备条件

     在mysql中创建数据库echartsdb,数据库中创建表t_comment表,表中设置两个字段word与count,添加表中的数据。如:附件中的 echartsdb.sql

    3. SpringBoot整合MyBatis

    3.1 创建 SpringBoot项目

    3.2 项目的修改

    3.2.1 删除mvn相关文件

    3.2.2 pom.xml 依赖的修改

    SpringBoot 版本为:2.3.5.RELEASE 、JDK修改为 1.8 等

    具体内容,查看下文

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>2.3.5.RELEASEversion>
    9. <relativePath/>
    10. parent>
    11. <groupId>com.laomagroupId>
    12. <artifactId>echartswordproartifactId>
    13. <version>0.0.1-SNAPSHOTversion>
    14. <name>echartswordproname>
    15. <description>Demo project for Spring Bootdescription>
    16. <properties>
    17. <java.version>1.8java.version>
    18. properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.bootgroupId>
    22. <artifactId>spring-boot-starter-webartifactId>
    23. dependency>
    24. <dependency>
    25. <groupId>org.springframework.bootgroupId>
    26. <artifactId>spring-boot-starter-thymeleafartifactId>
    27. dependency>
    28. <dependency>
    29. <groupId>org.mybatis.spring.bootgroupId>
    30. <artifactId>mybatis-spring-boot-starterartifactId>
    31. <version>2.0.1version>
    32. dependency>
    33. <dependency>
    34. <groupId>org.springframework.bootgroupId>
    35. <artifactId>spring-boot-starter-jdbcartifactId>
    36. dependency>
    37. <dependency>
    38. <groupId>mysqlgroupId>
    39. <artifactId>mysql-connector-javaartifactId>
    40. <version>8.0.29version>
    41. dependency>
    42. <dependency>
    43. <groupId>org.projectlombokgroupId>
    44. <artifactId>lombokartifactId>
    45. <version>1.18.20version>
    46. dependency>
    47. <dependency>
    48. <groupId>org.springframework.bootgroupId>
    49. <artifactId>spring-boot-starter-testartifactId>
    50. <scope>testscope>
    51. dependency>
    52. dependencies>
    53. <build>
    54. <plugins>
    55. <plugin>
    56. <groupId>org.springframework.bootgroupId>
    57. <artifactId>spring-boot-maven-pluginartifactId>
    58. plugin>
    59. plugins>
    60. build>
    61. project>

    4. 创建项目的相关内容

    4.1 项目结构设计:controller、service、mapper、pojo 等,resources/templates下创建index.html 页面,如下:

    具体代码如下:

    1. ===Comment===
    2. @Data
    3. public class Comment {
    4. private String word;
    5. private Integer count;
    6. }
    7. ===CommentController===
    8. @Controller
    9. public class CommentController {
    10. @Autowired
    11. private CommentService commentService;
    12. @RequestMapping("/")
    13. public String index(){
    14. return "index";
    15. }
    16. @ResponseBody
    17. @RequestMapping("/getData")
    18. public Object getData(){
    19. return commentService.getComments();
    20. }
    21. }
    22. ===CommentService===
    23. public interface CommentService {
    24. List getComments();
    25. }
    26. ===CommentServiceImpl===
    27. @Service
    28. public class CommentServiceImpl implements CommentService {
    29. @Autowired
    30. private CommentMapper commentMapper;
    31. @Override
    32. public List getComments() {
    33. return commentMapper.getComments();
    34. }
    35. }
    36. ===CommentMapper===
    37. @Mapper
    38. public interface CommentMapper {
    39. @Select("SELECT * FROM t_comment")
    40. List getComments();
    41. }
    42. ===index.html===
    43. "en" xmlns:th="http://www.thymeleaf.org">
    44. "UTF-8">
    45. Title
    46. 可视化界面

    4.2 application.properties 配置

    1. spring.application.name=echartswordpro
    2. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    3. spring.datasource.url=jdbc:mysql://192.168.170.100:3306/echartsdb
    4. spring.datasource.username=root
    5. spring.datasource.password=123456
    6. mybatis.type-aliases-package=com.neuedu.echartswordpro.pojo

    4.3 启动项目,访问 http://localhost:8080/getData 进行测试

    5. echarts 插件引入及配置

    5.1 需要使用echarts文件及词云文件echarts-wordcloud,使用文件及版本

     jquery2.2.4 、echarts5.0.1、echarts-wordcloud-2.0.0

    对应的文件查看:附件

    5.2 项目中引入对应的文件:

     resouces/static 下创建js目录,将对应的文件存入进去,如下图:

    5.3. index.html 中引入 js文件

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>云词title>
    6. <script type="text/javascript" th:src="@{/js/jquery.min.js}">script>
    7. <script type="text/javascript" th:src="@{/js/echarts.min.js}">script>
    8. <script type="text/javascript" th:src="@{/js/echarts-wordcloud.min.js}">script>
    9. head>
    10. <body>
    11. 可视化界面
    12. body>
    13. html>

    5.4 在html中创建云词的存储容器并创建云词对应的js文件

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>云词title>
    6. <script type="text/javascript" th:src="@{/js/jquery.min.js}">script>
    7. <script type="text/javascript" th:src="@{/js/echarts.min.js}">script>
    8. <script type="text/javascript" th:src="@{/js/echarts-wordcloud.min.js}">script>
    9. head>
    10. <body>
    11. <div id="wordcount" style="width: 500px;height: 350px">div>
    12. <script type="text/javascript" th:src="@{/js/wordcount.js}">script>
    13. body>
    14. html>

    5.5 wordcount.js 中具体内容如下:

    1. $(document).ready(function(){
    2. var myChart = echarts.init(document.getElementById('wordcount'));
    3. // 指定图表的配置项和数据
    4. option = {
    5. tooltip: {
    6. show: true
    7. },
    8. series: [
    9. {
    10. type: 'wordCloud', //词云图
    11. gridSize: 6, //词的间距
    12. shape: 'circle', //词云形状,可选diamond,pentagon,circle,triangle,star等形状
    13. sizeRange: [12, 45], //词云大小范围
    14. width: 900, //词云显示宽度
    15. height: 500, //词云显示高度
    16. textStyle: {
    17. color: function () {
    18. //词云的颜色随机
    19. return (
    20. 'rgb(' +
    21. [
    22. Math.round(Math.random() * 160),
    23. Math.round(Math.random() * 160),
    24. Math.round(Math.random() * 160)
    25. ].join(',') +
    26. ')'
    27. );
    28. },
    29. emphasis: {
    30. shadowBlur: 10, //阴影的模糊等级
    31. shadowColor: '#333' //鼠标悬停在词云上的阴影颜色
    32. }
    33. },
    34. data: []
    35. }
    36. ]
    37. };
    38. fetch("/getData").then(response => response.json()).then(res => {
    39. let arr_wordcounts = []
    40. for(var data of res){
    41. let word = {
    42. name: data.word,
    43. value: data.count
    44. }
    45. arr_wordcounts.push(word)
    46. }
    47. option.series[0].data = arr_wordcounts
    48. // 使用刚指定的配置项和数据显示图表。
    49. myChart.setOption(option);
    50. })
    51. })

     备注:注意 如果数据量大的话,设置的圆形云词图就会显示为矩形。如果要显示对应的圆形,则可以少显示一些数据,例如在Mapper接口中使用limit 显示一部分数据

    启动项目,访问:http://localhost:8080/ ,效果图如下:

    6. 扩展:自定义云图形状

    6.1 在option的series中,每个对象都有一个maskImage属性可以自定义云词形状,如有需要的可以自行百度学习。

    至此,整个案例整理完毕!

  • 相关阅读:
    HTML DOM 对象
    c++ 多态
    传智杯第一届例题5
    18、SqueezeNeRF
    离线语音模块初步学习——LSYT201B(深圳雷龙发展)
    [12] 使用 CUDA 进行图像处理
    ZYNQ之HLS学习----开篇实验
    openssl升级
    如何根据Explain执行计划对数据库查询语句进行优化
    JAVA和JVM和JDK和JRE和JAVA SE 是什么? 他们有什么区别? 怎么区分 编程下哪个?
  • 原文地址:https://blog.csdn.net/majingbobo/article/details/137272516