Slidev集成Chart.js:专业数据可视化演示文稿优化指南
引言:为何选择在Slidev中集成Chart.js?
在现代演示文稿中,高效的数据可视化对于清晰传达复杂信息至关重要。Slidev是一款灵活的开源演示文稿工具,基于Web技术构建,但在高级数据可视化方面存在一定局限。本文旨在提供一份全面的指南,介绍如何将强大的Chart.js库集成到Slidev中,以提升演示文稿的数据可视化效果。通过无缝集成Chart.js,您可以创建更具专业性、互动性和吸引力的数据图表,从而使您的技术演讲、业务报告或教学内容更具说服力。
Slidev原生图表功能解析
Slidev内置图表支持
Slidev提供了对多种图表和图形的原生支持,主要包括:
- Mermaid图表:Slidev内置支持Mermaid语法,用于生成流程图、时序图、甘特图等:
```mermaid
flowchart TDA[开始] --> B{是否有数据?}B -->|是| C[处理数据]B -->|否| D[获取数据]C --> E[展示结果]D --> E
2. **PlantUML支持**:可以创建UML图表:```markdown
```plantuml
@startuml
class User {+id: int+name: string+login()
}
class Product {+id: int+price: float
}
User --> Product: purchases
@enduml
3. **Markdown表格**:用于展示结构化数据:```markdown
| 季度 | 销售额 | 增长率 |
| --- | --- | --- |
| Q1 | 100万 | 5% |
| Q2 | 120万 | 20% |
| Q3 | 150万 | 25% |
| Q4 | 180万 | 20% |
下图展示了Mermaid、PlantUML和Markdown表格在Slidev中的渲染效果:
Slidev原生图表功能的局限性
尽管Slidev提供了基础图表功能,但在高级数据可视化方面存在明显不足:
-
功能限制:
- Mermaid和PlantUML更侧重于流程和结构展示,不适用于复杂数据可视化。
- Markdown表格仅能呈现结构化数据,难以直观展示数据趋势或进行有效对比。
- 缺乏交互式数据展示能力,限制了用户与图表的互动。
-
应用场景受限:
- 难以满足如销售数据分析、用户增长趋势或财务报告等专业场景的可视化需求。
- 无法创建高级图表类型,例如散点图、雷达图、热力图等。
- 不支持动态数据更新和实时交互功能。
-
美观度与定制性:
- 样式定制选项有限,难以满足个性化需求。
- 缺乏吸引人的动画和过渡效果。
- 不支持品牌定制,难以融入企业视觉风格。
对于需要进行深入数据分析、展示业务洞察或进行比较研究的演示文稿,Slidev的原生图表功能显然无法满足需求。因此,引入Chart.js这样的专业数据可视化库成为必要。
Chart.js概述与核心优势
Chart.js简介
Chart.js是一款流行的开源JavaScript图表库,利用HTML5 Canvas元素进行图表绘制。其主要特点包括:
- 支持多种常用图表类型:包括折线图、柱状图、饼图、环形图、雷达图、极地图、散点图和气泡图等8种。
- 响应式设计:图表能够自动适应不同屏幕尺寸,确保在各种设备上都能良好显示。
- 丰富的自定义选项:提供广泛的配置选项,允许用户精细控制图表的外观和行为。
- 动画效果:支持多种动画效果,增强图表的视觉吸引力。
- 轻量级:压缩后文件体积小,加载速度快,对演示文稿性能影响小。
Chart.js与Slidev结合的优势
将Chart.js与Slidev结合,可以充分发挥两者的优势:
- 轻量高效:Chart.js体积小巧,不会显著增加Slidev演示文稿的加载负担。
- 易于上手:Chart.js的API设计简洁直观,学习曲线平缓,开发者可以快速掌握。
- 美观且可定制:Chart.js提供美观的默认样式,并支持丰富的自定义,满足个性化需求。
- 出色的响应式表现:Chart.js图表自动适应屏幕尺寸,非常适合Slidev的演示环境。
- 良好的Vue兼容性:Chart.js与Vue生态系统兼容良好,与基于Vue构建的Slidev能够无缝集成。
- 活跃的社区支持:Chart.js拥有庞大的用户社区和持续的更新,资源丰富,遇到问题易于解决。
通过将Chart.js集成到Slidev中,您可以在保持演示文稿轻便的同时,实现专业级的数据可视化效果,有效弥补Slidev原生图表功能的不足。
在Slidev中集成Chart.js的实践方法
方法一:在Slidev幻灯片中直接使用Chart.js(推荐初学者)
这是将Chart.js集成到Slidev中最直接、最便捷的方式。您只需安装Chart.js库,然后在Slidev的.md
幻灯片文件中直接编写JavaScript代码来创建和配置图表:
- 安装Chart.js库:
npm install chart.js
- 在幻灯片中直接使用:
---
layout: default
---# 图表自动填充示例<div class="chart-container"><canvas id="myChart"></canvas>
</div><style>
.chart-container {display: flex;flex-direction: column;flex-grow: 1;height: 90%;
}.chart-container canvas {flex-grow: 1;width: 100% !important;height: 100% !important;
}
</style><script setup>
import { onMounted } from 'vue'
import { Chart, registerables } from 'chart.js'Chart.register(...registerables)onMounted(() => {const ctx = document.getElementById('myChart')new Chart(ctx, {type: 'bar',data: {labels: ['一月', '二月', '三月', '四月'],datasets: [{label: '销售额',data: [65, 59, 80, 81],backgroundColor: 'rgba(75, 192, 192, 0.2)',borderColor: 'rgba(75, 192, 192, 1)',borderWidth: 1}]},options: {responsive: true,maintainAspectRatio: false}})
})
</script>
下图展示了在Slidev幻灯片中直接使用Chart.js创建的柱状图示例:
这种方法的优点:
- 简单直接,无需创建额外的组件文件
- 代码集中在一个幻灯片文件中,便于管理
- 充分利用了Slidev对Vue和JavaScript的原生支持
- 样式设置灵活,可以让图表自动填充可用空间
关键样式说明:
flex-grow: 1
和height: 100%
使图表容器填充可用空间width: 100% !important
和height: 100% !important
确保Canvas元素占满容器maintainAspectRatio: false
允许图表根据容器大小调整而不保持固定比例
方法二:通过Vue组件封装实现Chart.js集成(推荐复用场景)
为了提高代码的可重用性和维护性,特别是当您需要在多个Slidev幻灯片中展示相同类型的Chart.js图表时,建议将Chart.js图表封装成可复用的Vue组件。
- 在您的Slidev项目根目录下的
components
文件夹中创建一个新的Vue文件,例如命名为BarChart.vue
:
<template><div class="chart-container"><canvas ref="chart"></canvas></div>
</template><script setup>
import { ref, onMounted } from 'vue'
import { Chart, registerables } from 'chart.js'Chart.register(...registerables)const props = defineProps({chartData: {type: Object,required: true},options: {type: Object,default: () => ({})}
})const chart = ref(null)onMounted(() => {const ctx = chart.value.getContext('2d')new Chart(ctx, {type: 'bar',data: props.chartData,options: {responsive: true,maintainAspectRatio: false,...props.options}})
})
</script><style>
.chart-container {position: relative;height: 90%;width: 100%;
}
</style>
- 在幻灯片中使用该组件:
---
layout: default
---# 销售数据分析<BarChart :chartData="{labels: ['一月', '二月', '三月', '四月', '五月'],datasets: [{label: '销售额(万元)',data: [12, 19, 15, 27, 22],backgroundColor: 'rgba(75, 192, 192, 0.2)',borderColor: 'rgba(75, 192, 192, 1)',borderWidth: 1}]
}" />
下图展示了使用Vue组件封装Chart.js创建的柱状图示例:
这种方法的优点:
- 可重用性:图表组件可以在多个幻灯片中重复使用
- 代码复用:避免在每个幻灯片中重复编写相同的图表代码
- 易于维护:修改图表样式或数据只需要修改组件文件
- 响应式数据绑定:图表数据变化时自动更新
方法三:利用vue-chartjs库简化Chart.js集成(推荐Vue开发者)
对于熟悉Vue生态系统的开发者,推荐使用vue-chartjs
库。vue-chartjs
是Chart.js官方为Vue提供的封装库,它提供了更符合Vue习惯的API,能够进一步简化Chart.js在Slidev中的集成过程,并提供更好的开发体验。相比直接使用Chart.js或手动封装Vue组件,vue-chartjs
具有以下显著优势:
- 声明式API:完全遵循Vue的声明式编程范式,通过组件属性(props)传递数据和配置,无需手动操作DOM。
- 代码精简:显著减少创建图表所需的样板代码。
- 响应式数据更新:与Vue的响应式系统深度集成,图表数据变化时自动高效更新。
- 完善的TypeScript支持:提供完整的TypeScript类型定义,增强代码的可维护性和健壮性。
- 自动生命周期管理:自动处理Chart.js图表的创建、更新和销毁,与Vue组件生命周期无缝同步。
安装vue-chartjs及Chart.js
首先,通过npm或yarn安装chart.js
和vue-chartjs
:
npm install chart.js vue-chartjs
vue-chartjs基本使用示例
在components
文件夹下创建您的图表组件,例如BarChart.vue
。使用vue-chartjs
提供的组件(如<Bar>
、<Line>
等)来渲染图表:
<template><Bar :data="chartData" :options="chartOptions" />
</template><script setup>
import { Bar } from 'vue-chartjs'
import { Chart as ChartJS, Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale } from 'chart.js'// 注册必要的Chart.js组件
ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale)// 定义组件接收的props
const props = defineProps({// 图表数据chartData: {type: Object,required: true},// 图表配置选项chartOptions: {type: Object,default: () => ({responsive: true,maintainAspectRatio: false})}
})
</script>
在幻灯片中使用vue-chartjs组件
---
layout: default
---# 使用vue-chartjs的销售数据分析<div class="chart-wrapper"><BarChart :chartData="{labels: ['一月', '二月', '三月', '四月'],datasets: [{label: '销售额(万元)',data: [65, 59, 80, 81],backgroundColor: 'rgba(75, 192, 192, 0.2)',borderColor: 'rgba(75, 192, 192, 1)',borderWidth: 1}]}" :chartOptions="{responsive: true,maintainAspectRatio: false,plugins: {title: {display: true,text: '季度销售数据'}}}" />
</div><style>
/* 使用Flexbox布局创建自适应高度的图表容器 */
.chart-wrapper {display: flex;flex-direction: column;height: 400px; /* 设置明确的高度 */width: 100%;position: relative; /* 为内部元素的绝对定位提供参考 */
}
</style>
下图展示了使用vue-chartjs库创建的柱状图示例:
这种方法的优点:
- 声明式编程方式:符合Vue的组件化思想,使用组件标签和属性来控制图表
- 无需DOM操作:不需要直接操作DOM,通过props传递数据和配置
- 自动生命周期管理:组件会自动处理图表的创建和销毁
- 响应式数据绑定:当数据变化时,图表会自动更新
- 代码量更少:减少样板代码,更加简洁
- 更好的TypeScript支持:提供完整的类型定义
- 更好的组件复用性:可以轻松创建可复用的图表组件库
- 与Vue生态系统无缝集成:不需要额外的配置就能与Vue的响应式系统工作
- 更少的测试负担:组件已经经过测试,减少了自定义封装的测试负担
- 更好的错误处理:内置的错误处理机制
在Slidev默认布局中创建多图表可视化
除了展示单个Chart.js图表,您还可以在Slidev的默认幻灯片布局中轻松实现多个图表的组合展示。通过利用CSS Grid(网格布局)或Flexbox(弹性盒子布局),您可以灵活地组织和排列图表,而无需创建复杂的自定义布局文件。这种方法简单高效,适用于大多数需要在一个幻灯片中呈现多个数据视图的场景。
利用CSS Grid布局组合图表
CSS网格布局是实现多图表组合的理想选择,它允许我们轻松创建二维布局结构:
---
layout: default
---# 全面业务分析<div class="grid grid-cols-2 gap-4"><div><h3>销售趋势</h3><div class="chart-container"><canvas id="salesChart"></canvas></div></div><div><h3>客户分布</h3><div class="chart-container"><canvas id="customerChart"></canvas></div></div><div><h3>产品占比</h3><div class="chart-container"><canvas id="productChart"></canvas></div></div><div><h3>区域对比</h3><div class="chart-container"><canvas id="regionChart"></canvas></div></div>
</div><style>
.chart-container {height: 80%;width: 100%;
}
h3 {margin-bottom: 0.5rem;font-size: 1rem;
}
</style><script setup>
import { onMounted } from 'vue'
import { Chart, registerables } from 'chart.js'Chart.register(...registerables)onMounted(() => {// 销售趋势图const salesCtx = document.getElementById('salesChart')new Chart(salesCtx, {type: 'line',data: {labels: ['1月', '2月', '3月', '4月', '5月', '6月'],datasets: [{label: '销售额',data: [65, 59, 80, 81, 56, 55],fill: false,borderColor: 'rgb(75, 192, 192)',tension: 0.1}]},options: {responsive: true,maintainAspectRatio: false}})// 客户分布图const customerCtx = document.getElementById('customerChart')new Chart(customerCtx, {type: 'pie',data: {labels: ['新客户', '老客户', '回流客户'],datasets: [{data: [30, 50, 20],backgroundColor: ['rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)'],borderColor: ['rgba(255, 99, 132, 1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)'],borderWidth: 1}]},options: {responsive: true,maintainAspectRatio: false}})// 产品占比图const productCtx = document.getElementById('productChart')new Chart(productCtx, {type: 'doughnut',data: {labels: ['产品A', '产品B', '产品C', '产品D'],datasets: [{data: [40, 30, 20, 10],backgroundColor: ['rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)'],borderColor: ['rgba(255, 99, 132, 1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)'],borderWidth: 1}]},options: {responsive: true,maintainAspectRatio: false}})// 区域对比图const regionCtx = document.getElementById('regionChart')new Chart(regionCtx, {type: 'bar',data: {labels: ['华东', '华北', '华南', '西部'],datasets: [{label: '销售额',data: [120, 85, 95, 65],backgroundColor: 'rgba(153, 102, 255, 0.2)',borderColor: 'rgba(153, 102, 255, 1)',borderWidth: 1}]},options: {responsive: true,maintainAspectRatio: false}})
})
</script>
下图展示了在Slidev默认布局中使用CSS Grid组合的四个Chart.js图表示例:
在上面的示例中:
- 使用
grid grid-cols-2 gap-4
创建了2x2的网格布局 - 每个网格单元包含一个标题和一个图表
- 每个图表容器都设置了
height: 80%
和width: 100%
以填充可用空间
不同的网格布局变体
1. 三列布局
<div class="grid grid-cols-3 gap-4 h-[300px]"><!-- 三个图表 -->
</div>
2. 混合大小布局
<div class="grid grid-cols-3 gap-4 h-[400px]"><div class="col-span-2"><h3>主要销售趋势</h3><div class="chart-container"><canvas id="mainChart"></canvas></div></div><div><h3>区域分布</h3><div class="chart-container"><canvas id="regionChart"></canvas></div></div><div><h3>产品类别</h3><div class="chart-container"><canvas id="categoryChart"></canvas></div></div><div class="col-span-2"><h3>月度对比</h3><div class="chart-container"><canvas id="monthlyChart"></canvas></div></div>
</div>
这个示例创建了一个3列网格,其中一些图表占据多个列(使用col-span-2
)。
3. 不同行高的布局
<div class="grid grid-cols-2 gap-4 h-[500px]"><div class="row-span-2"><h3>年度趋势分析</h3><div class="chart-container"><canvas id="yearlyChart"></canvas></div></div><div><h3>季度表现</h3><div class="chart-container"><canvas id="quarterlyChart"></canvas></div></div><div><h3>产品对比</h3><div class="chart-container"><canvas id="productChart"></canvas></div></div>
</div>
这个示例中,左侧图表使用row-span-2
占据两行的高度,右侧有两个较小的图表。
使用Flexbox布局
除了Grid布局外,Flexbox也是组织多图表的有效方式:
1. 并排显示两个图表
---
layout: default
---# 销售与利润对比<div class="flex gap-4 h-[400px]"><div class="w-1/2"><h3>销售额</h3><div class="chart-container"><canvas id="salesChart"></canvas></div></div><div class="w-1/2"><h3>利润率</h3><div class="chart-container"><canvas id="profitChart"></canvas></div></div>
</div><style>
.chart-container {height: 100%;width: 100%;
}
</style><script setup>
import { onMounted } from 'vue'
import { Chart, registerables } from 'chart.js'Chart.register(...registerables)onMounted(() => {// 销售额图表const salesCtx = document.getElementById('salesChart')new Chart(salesCtx, {type: 'bar',data: {labels: ['一月', '二月', '三月', '四月'],datasets: [{label: '销售额',data: [65, 59, 80, 81],backgroundColor: 'rgba(75, 192, 192, 0.2)',borderColor: 'rgba(75, 192, 192, 1)',borderWidth: 1}]},options: {responsive: true,maintainAspectRatio: false}})// 利润率图表const profitCtx = document.getElementById('profitChart')new Chart(profitCtx, {type: 'line',data: {labels: ['一月', '二月', '三月', '四月'],datasets: [{label: '利润率',data: [28, 48, 40, 19],backgroundColor: 'rgba(153, 102, 255, 0.2)',borderColor: 'rgba(153, 102, 255, 1)',borderWidth: 1,fill: false}]},options: {responsive: true,maintainAspectRatio: false}})
})
</script>
下图展示了在Slidev默认布局中使用CSS Flexbox组合的两个Chart.js图表示例:
2. 上下堆叠图表
<div class="flex flex-col gap-4 h-[500px]"><div class="flex-1"><h3>年度销售趋势</h3><div class="chart-container"><canvas id="yearlyChart"></canvas></div></div><div class="flex-1"><h3>月度销售明细</h3><div class="chart-container"><canvas id="monthlyChart"></canvas></div></div>
</div>
3. 混合布局(Flex + Grid)
对于更复杂的布局需求,可以结合使用Flex和Grid:
<div class="flex gap-4 h-[500px]"><div class="w-1/3"><h3>销售概览</h3><div class="chart-container"><canvas id="overviewChart"></canvas></div></div><div class="w-2/3"><h3>详细分析</h3><div class="grid grid-cols-2 grid-rows-2 gap-4 h-full"><div><h4>区域分布</h4><div class="chart-container"><canvas id="regionChart"></canvas></div></div><div><h4>产品类别</h4><div class="chart-container"><canvas id="categoryChart"></canvas></div></div><div><h4>客户类型</h4><div class="chart-container"><canvas id="customerChart"></canvas></div></div><div><h4>销售渠道</h4><div class="chart-container"><canvas id="channelChart"></canvas></div></div></div></div>
</div>
这个示例创建了一个左右分栏的布局,左侧占1/3宽度显示一个概览图表,右侧占2/3宽度并使用网格布局显示4个详细图表。
总结:提升Slidev演示文稿数据可视化水平
将Chart.js集成到Slidev中,为创建高质量的数据驱动型演示文稿开辟了新的可能性。通过遵循本文提供的详细指南,您可以:
- 克服Slidev原生图表限制:显著增强演示文稿的数据可视化能力,实现专业级的图表展示。
- 灵活集成Chart.js:掌握在Slidev幻灯片中直接使用Chart.js、通过Vue组件封装或利用
vue-chartjs
库等多种集成方法。 - 构建复杂图表布局:学习如何在默认布局下,运用CSS Grid和Flexbox有效地组织和呈现多个图表。
Slidev与Chart.js的强大结合,赋予开发者和演讲者创建更具吸引力、信息量更大且专业的数据可视化演示文稿的能力。无论您的目标是进行深入的业务分析报告、技术分享还是教育培训,这种集成都能帮助您的内容脱颖而出,更有效地传达关键信息。即使您是Vue或Chart.js的初学者,本文提供的方法也能帮助您轻松上手,快速提升演示文稿的数据表现力。
相关文章:
Slidev集成Chart.js:专业数据可视化演示文稿优化指南
引言:为何选择在Slidev中集成Chart.js? 在现代演示文稿中,高效的数据可视化对于清晰传达复杂信息至关重要。Slidev是一款灵活的开源演示文稿工具,基于Web技术构建,但在高级数据可视化方面存在一定局限。本文旨在提供一…...
动态规划(3)学习方法论:构建思维模型
引言 动态规划是算法领域中一个强大而优雅的解题方法,但对于许多学习者来说,它也是最难以掌握的算法范式之一。与贪心算法或分治法等直观的算法相比,动态规划往往需要更抽象的思维和更系统的学习方法。在前两篇文章中,我们介绍了动态规划的基础概念、原理以及问题建模与状…...
NDS3211HV单路H.264/HEVC/HD视频编码器
1产品概述 NDS3211HV单路高清编码器是一款功能强大的音/视频编码设备,支持2组立体声,同时还支持CC(CVBS)字幕。支持多种音频编码方式。该设备配备了多种音/视频输入接口:HD-SDI数字视频输入、HDMI高清输入(支持CC)、A…...
GO语言语法---if语句
文章目录 1. 基本语法1.1 单分支1.2 双分支1.3 多分支 2. Go特有的if语句特性2.1 条件前可以包含初始化语句2.2 条件表达式不需要括号2.3 必须使用大括号2.4 判断语句所在行数控制 Go语言的if语句用于条件判断,与其他C风格语言类似,但有一些独特的语法特…...
单细胞转录组(4)Cell Ranger
使用 Cell Ranger 分析单细胞数据 1. 数据转换 BCL2FASTQ 在进行单细胞数据分析之前,需要将 Illumina 测序仪生成的 BCL 格式数据转换为 FASTQ 格式。这一步通常使用 bcl2fastq 软件完成。 1.1 安装 bcl2fastq bcl2fastq 是 Illumina 提供的软件,用于…...
Python爬虫-爬取百度指数之人群兴趣分布数据,进行数据分析
前言 本文是该专栏的第56篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前的文章《Python爬虫-爬取百度指数之需求图谱近一年数据》中,笔者有详细介绍过爬取需求图谱的数据教程。 而本文,笔者将再以百度指数为例子,基于Python爬虫获取指定关键词的人群“兴…...
使用Python和Selenium打造一个全网页截图工具
无论是归档网站、测试页面设计,还是为报告记录网页内容,一个可靠的截图工具都能大大提升效率。本文将介绍如何使用Python、Selenium和wxPython构建一个用户友好的网页截图工具。该工具能在浏览器中显示网页,自动平滑滚动到底部以触发懒加载内…...
自动化脚本开发:Python调用云手机API实现TikTok批量内容发布
在2025年的技术生态下,通过Python实现TikTok批量内容发布的自动化脚本开发需结合云手机API调用、TikTok开放接口及智能调度算法。以下是基于最新技术实践的系统化开发方案: 一、云手机环境配置与API对接 云手机平台选择与API接入 推荐使用比特云手机或丁…...
React Hooks 必须在组件最顶层调用的原因解析
文章目录 前言一、Hooks 的基本概念二、Hooks 的调用规则三、为什么 Hooks 必须在最顶层调用?1. 维护 Hooks 的调用顺序2. 闭包与状态关联3. 实现细节:Hook 的链表结构 四、违反规则的后果五、如何正确使用 Hooks六、示例:正确与错误的用法对…...
西门子 Teamcenter13 Eclipse RCP 开发 1.2 工具栏 开关按钮
西门子 Teamcenter13 Eclipse RCP 开发 1.2 工具栏 开关按钮 1 配置文件2 插件控制3 命令框架 位置locationURI备注菜单栏menu:org.eclipse.ui.main.menu添加到传统菜单工具栏toolbar:org.eclipse.ui.main.toolbar添加到工具栏 style 值含义显示效果push普通按钮(默…...
5.27本日总结
一、英语 复习list2list29 二、数学 学习14讲部分内容 三、408 学习计组1.2内容 四、总结 高数和计网明天结束当前章节,计网内容学完之后主要学习计组和操作系统 五、明日计划 英语:复习lsit3list28,完成07年第二篇阅读 数学&#…...
【持续更新中】架构面试知识学习总结
1.分库分表出现冗余数据: ☆分库分表方法:水平和垂直(业务场景,数据关联性。逻辑要调查清楚) 垂直:将一个表(库)按照列的业务相关性进行拆分,把经常一起使用的列放在一张表(库)&…...
文字溢出省略号显示
一、 单行文字溢出、省略号显示 二、 多行文字溢出,省略号显示 有较大的兼容性问题,适用于Webkit为内核的浏览器软件,或者移动端的(大部分也是webkit) 此效果建议后端人员开发 三、图片底侧空白缝隙的修复技巧&#…...
力扣-283-移动零
1.题目描述 2.题目链接 283. 移动零 - 力扣(LeetCode) 3.题目代码 class Solution {public void moveZeroes(int[] nums) {int dest-1;int cur0;while(cur<nums.length){if(nums[cur]0){cur;}else if(nums[cur]!0){swap(nums,cur,dest1);cur;dest…...
【001】RenPy打包安卓apk 流程源码级别分析
1. 入口在下图 2. SDK版本及代码入口 (renpy-8.3.7-sdk) 由于SDK一直在升级,本文采用 标题中的版本进行分析,整体逻辑变化不太大。 实际执行逻辑是调用的rapt 2.1 点击按钮实际执行逻辑 def AndroidIfState(state, needed, acti…...
机器学习-人与机器生数据的区分模型测试-数据处理 - 续
这里继续 机器学习-人与机器生数据的区分模型测试-数据处理1的内容 查看数据 中1的情况 #查看数据1的分布情况 one_ratio_list [] for col in data.columns:if col city or col target or col city2: # 跳过第一列continueelse:one_ratio data[col].mean() # 计算1值占…...
计算机视觉与深度学习 | Python实现EMD-VMD-LSTM时间序列预测(完整源码和数据)
EMD-VMD-LSTM 一、完整代码实现二、代码结构解析三、关键参数说明四、性能优化建议五、工业部署方案以下是用Python实现EMD-VMD-LSTM时间序列预测的完整代码,结合经验模态分解(EMD)、变分模态分解(VMD)与LSTM深度学习模型,适用于复杂非平稳信号的预测任务。代码包含数据生…...
数据结构与算法——双向链表
双向链表 定义链表分类双向链表:带头双向循环链表 初始化打印尾插头插尾删头删查找在pos(指定位置)之后插入结点在pos(指定位置)之前插入结点删除pos(指定位置)的结点销毁顺序表与链表的分析 定义 链表分类 单向和双向 带头和不带头 带头是指存在一个头结点&…...
.NET 中管理 Web API 文档的两种方式
前言 在 .NET 开发中管理 Web API 文档是确保 API 易用性、可维护性和一致性的关键。今天大姚给大家分享两种在 .NET 中管理 Web API 文档的方式,希望可以帮助到有需要的同学。 Swashbuckle Swashbuckle.AspNetCore 是一个流行的 .NET 库,它使得在 AS…...
混合学习:Bagging与Boosting的深度解析与实践指南
引言 在机器学习的世界里,模型的性能优化一直是研究的核心问题。无论是分类任务还是回归任务,我们都希望模型能够在新的数据上表现出色,即具有良好的泛化能力。然而,实际应用中常常遇到模型过拟合(高方差)…...
基于大疆Mini 3无人机和指定软件工具链的完整3D建模工作
基于大疆Mini 3无人机和指定软件工具链的完整3D建模工作流程关键步骤: 1. 无人机航拍准备 • 设备检查:确保大疆 Mini 3 电量充足,相机设置为 RAW 格式(便于后期调色),关闭自动白平衡。 • 飞行规划&…...
开源项目实战学习之YOLO11:12.1 ultralytics-models-sam-blocks.py源码
👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-__init__.py2.sam-modules-blocks.pybl…...
3D个人简历网站 5.天空、鸟、飞机
1.显示天空 models下新建文件Sky.jsx Sky.jsx // 从 React 库中导入 useRef 钩子,用于创建可变的 ref 对象 import { useRef } from "react"; // 从 react-three/drei 库中导入 useGLTF 钩子,用于加载 GLTF 格式的 3D 模型 import { useGLT…...
蓝桥杯-不完整的算式
问题描述 小蓝在黑板上写了一个形如 AopBCAopBC 的算式,其中 AA、BB、CC 都是非负整数,opop 是 、-、*、/、-、*、/(整除)四种运算之一。不过 AA、opop、BB、CC 这四部分有一部分被不小心的同学擦掉了。 给出这个不完整的算式&a…...
【Python 算法零基础 3.递推】
压抑与痛苦,那些辗转反侧的夜,终会让我们更加强大 —— 25.5.16 一、递推的概念 递推 —— 递推最通俗的理解就是数列,递推和数列的关系就好比 算法 和 数据结构 的关系,数列有点像数据结构中的线性表(可以是顺序表,也…...
计算机视觉与深度学习 | Matlab实现EMD-LSTM和LSTM时间序列预测对比(完整源码和数据)
EMD-LSTM与LSTM 一、数据生成与预处理二、经验模态分解(EMD)三、数据预处理四、模型构建与训练1. 单一LSTM模型2. EMD-LSTM混合模型五、预测与结果对比1. 单一LSTM预测2. EMD-LSTM预测3. 性能评估六、结果可视化七、完整代码说明八、典型输出结果九、改进方向以下是用MATLAB实…...
【爬虫】DrissionPage-6
官方文档: https://www.drissionpage.cn/browser_control/visit https://www.drissionpage.cn/browser_control/page_operation 1. Tab 对象概述 Tab 对象 是 DrissionPage 中用于控制浏览器标签页的主要单位。每个 Tab 对象对应一个浏览器标签页,负责执行各种网页…...
C/C++实践(十)C语言冒泡排序深度解析:发展历史、技术方法与应用场景
一、发展历史 冒泡排序(Bubble Sort)作为计算机科学领域最基础的排序算法之一,其历史可追溯至计算机编程的早期阶段。尽管具体起源时间难以考证,但它在20世纪50年代至60年代间被广泛讨论和应用。冒泡排序的名称来源于其独特的排序…...
git提交库常用词
新功能 feat修改BUG fix文档修改 docs格式修改 style重构 refactor性能提升 perf测试 test构建系统 build对CI配置文件修改 ci修改构建流程、或增加依赖库、工具 chore回滚版本 revert...
结构化思考力_第一章_明确理念打基础
接收信息的3个步骤 1. 梳理:观点、理由、事实和数据; 2. 画3这的结构图 3. 一句话概括 可套用固定格式。在——的基础上,从——、——、——N个方面,说明了————。 一句话概括主要内容的前提是,一定是结构非常…...
【C语言练习】046. 编写插入排序算法
046. 编写插入排序算法 046. 编写插入排序算法C语言实现插入排序代码说明示例运行输入:输出:插入排序的特点一、插入排序的适用场景二、C语言代码示例及分步讲解代码实现代码解析三、示例执行过程四、性能分析五、总结046. 编写插入排序算法 插入排序(Insertion Sort)是一…...
Kotlin与机器学习实战:Android端集成TensorFlow Lite全指南
本文将手把手教你如何在Android应用中集成TensorFlow Lite模型,实现端侧机器学习推理能力。我们以图像分类场景为例,提供可直接运行的完整代码示例。 环境准备 1. 开发环境要求 Android Studio Arctic Fox以上版本AGP 7.0Kotlin 1.6Minimum SDK 21 2.…...
【Linux笔记】nfs网络文件系统与autofs(nfsdata、autofs、autofs.conf、auto.master)
一、nfs概念 NFS(Network File System,网络文件系统) 是一种由 Sun Microsystems 于1984年开发的分布式文件系统协议,允许用户通过网络访问远程计算机上的文件,就像访问本地文件一样。它广泛应用于 Unix/Linux 系统&a…...
Redis持久化机制详解:保障数据安全的关键策略
在现代应用开发中,Redis作为高性能的内存数据库被广泛使用。然而,内存的易失性特性使得持久化成为Redis设计中的关键环节。本文将全面剖析Redis的持久化机制,包括RDB、AOF以及混合持久化模式,帮助开发者根据业务需求选择最适合的持…...
经典算法 求C(N, K) % mod,保证mod是质数
求C(N, K) % mod,保证mod是质数 问题描述 给你三个整数N,K,mod保证mod是一个质数,求组合数C(N, K) % mod。 输入描述 输入有多组,输入第一行为两个整数T,mod。接下来2 - T 1行,每行输入N, K。 输出描…...
NY309NY318美光科技颗粒NY319NY320
NY309NY318美光科技颗粒NY319NY320 技术解析:架构创新与性能突围 美光科技的NY系列颗粒(如NY309、NY318、NY319、NY320)延续了其在存储技术领域的创新基因。以NY319为例,其采用16层BiCS3 3D NAND工艺,通过浮栅&#…...
Buildroot 移植MiniGUI: 编写简单示例(基于君正X2000)
概述 上一篇文章: Buildroot 移植MiniGUI, 在编译打包完文件系统后, 编写一个Demo进一步验证MiniGUI的功能. 目标平台: 键值CPUX2000架构mips内存128MB存储256MBLCD600*1024 MiniGUI 的三种运行模式 在编写第一个 MiniGUI 程序之前,需要了解如下事实࿱…...
flutter长列表 ListView、GridView、SingleChildScrollView、CustomScrollView区别
组件名称用途/适合场景是否懒加载支持列表结构用法复杂度SingleChildScrollView适用于内容数量不大、不重复的页面(如表单、静态内容)❌ 否❌ 否⭐⭐ListView适用于垂直方向的长列表,自动滚动;适合展示大量数据✅ 支持✅ 是⭐⭐Li…...
OpenCV透视变换
概念 OpenCV 透视变换是将图像从一个视平面投影到另一个视平面的过程,也叫投影映射 ,属于空间立体三维变换。它基于透视原理,通过 33 的变换矩阵作用于图像像素坐标来实现映射转换 ,能模拟人眼或相机镜头观看三维空间物体时的透视…...
Node.js 实战四:数据库集成最佳实践
你写了个登录接口,用上了 JWT;然后,产品来了句: “用户数据能分页查吗?能关联公司信息吗?我们这边还有多语言字段…” 你发现:SQL 写得越来越长,关联越来越绕,字段越来越…...
【JDBC】JDBC概述、历史版本及特征
1_JDBC概述 什么是JDBC JDBC(Java DataBase Connectivity, Java数据库连接) ,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 有了JDBC,程序员只需用JDBC API写一个程序…...
redis的pipline使用结合线程池优化实战
文章目录 代码讲解与事务 (MULTI/EXEC) 的区别在你这段代码里的价值可能的坑实战建议 代码 /*** 批量根据用户 ID 查询用户信息** param findUsersByIdsReqDTO* return*/Overridepublic Response<List<FindUserByIdRspDTO>> findByIds(FindUsersByIdsReqDTO findUs…...
【RabbitMQ】整合 SpringBoot,实现工作队列、发布/订阅、路由和通配符模式
文章目录 工作队列模式引入依赖配置声明生产者代码消费者代码 发布/订阅模式引入依赖声明生产者代码发送消息 消费者代码运行程序 路由模式声明生产者代码消费者代码运行程序 通配符模式声明生产者代码消费者代码运行程序 工作队列模式 引入依赖 我们在创建 SpringBoot 项目的…...
MySQL初阶:sql事务和索引
索引(index) 可以类似理解为一本书的目录,一个表可以有多个索引。 索引的意义和代价 在MySQL中使用select进行查询时会经过: 1.先遍历表 2.将条件带入每行记录中进行判断,看是否符合 3.不符合就跳过 但当表中的…...
使用教程:8x16模拟开关阵列可级联XY脚双向导通自动化接线
以下通过点亮LED进行基本使用流程演示,实际可以连接复杂外设(SPI、CAN、ADC等) 单模块使用 RX、TX、5V和GND接到串口模块;X5接5V;Y2接LED;LED-接GND 串口模块插上电脑后,LED没有亮;因为此时模…...
很啰嗦,再次总结 DOM
DOM (文档对象模型) 详解 一、DOM 基础概念 1. 定义与作用 DOM(Document Object Model)即文档对象模型,是一种用于 HTML 和 XML 文档的编程接口。它将文档解析为一个由节点和对象组成的树状结构,允许程序和脚本动态访问、修改文…...
文件读取漏洞路径与防御总结
文件读取漏洞路径与防御总结 文件读取漏洞允许攻击者通过路径遍历等手段访问未授权的文件。以下是Linux和Windows系统中常见敏感路径的归纳及防御建议: Linux 系统常见敏感路径 系统关键文件: /etc/passwd:用户账户信息(可被用来…...
电池的充放电电流中C的含义
充电电池的充放电电流标注为 -0.2C、1C、2C 等参数时,其含义与电池的容量和充放电速率直接相关。以下是详细解释: 1. 什么是 “C” 值? • C 是电池的 额定容量(Capacity) 的缩写,单位为 Ah(安时…...
文章记单词 | 第91篇(六级)
一,单词释义 stride /straɪd/- v. 大步走;跨越;迈进 /n. 大步;进展;步幅diplomatic /ˌdɪpləˈmtɪk/- adj. 外交的;有手腕的conquer /ˈkɒŋkə(r)/- v. 征服;战胜;克服geogra…...
Nginx应用场景详解与配置指南
1. 什么是Nginx? Nginx(发音为"engine-x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它以高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 2. Nginx的主要应用场景 2.1 …...