MATLAB|科研绘图|山脊图

效果图

山脊图介绍

山脊图(Ridge Plot),也被称为Joy Plot,是一种用于可视化数据分布的图表,特别是用于显示多个组的分布情况。在这种图表中,每个组的数据分布都通过平滑的密度曲线来表示,这些曲线沿着垂直轴堆叠,形成类似山脊的视觉效果。山脊图是核密度估计(KDE)的一个应用,它提供了比传统的条形图或直方图更平滑的数据分布视图。

用途:山脊图主要用于展示和比较不同组或类别内数据的分布情况。它特别适合于以下情境:

  • 比较多个分布:当需要展示和比较多组数据的分布形状时,山脊图能够直观地展示出分布之间的差异。
  • 展现趋势变化:在时间序列数据中,山脊图可以用来展示数据随时间的变化趋势。
  • 优化空间利用:通过堆叠的方式,山脊图能在有限的空间内展示大量的分布信息。

缺点:

  • 可读性:对于不熟悉这种图表的观众来说,山脊图可能难以理解和解读。
  • 叠加问题:当曲线重叠较多时,可能会导致图表的某些部分难以区分。
  • 数据量限制:对于数据量非常大的数据集,山脊图可能不那么有效,因为过多的曲线会使图表变得杂乱。

应用场景

  • 时间序列分析:在金融、经济、气象等领域,用于展示某个变量随时间的变化趋势。
  • 社会科学:比如在选举数据分析中,展示不同候选人或党派在不同地区或人群中的支持率分布。
  • 生物医学:用于展示不同实验组或治疗方法下的生物统计数据分布。

绘图教程

线条山脊图

data = randn(100,12)+[ 20 22 24 26 28 31 30 28 26 24 22 20];
lgLable= {'January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December'};
colors=makeColorMap([0,0,0;1,1,1],12);
figure('Position',[476 246 511 620])
p=0.15;
yTick=(1:size(data, 2))*p;
for i = 1:size(data, 2)
    [f, x] = ksdensity(data(:, i));
    f=f+i*p;
    pHandle=plot(x, f, 'LineWidth', 1.5,'color',colors(i,:));
    hold on;
    yline(yTick(i),'-.','LineWidth',1,'Color',pHandle.Color,'HandleVisibility','off')
end
grid off;box off;
legend(lgLable,'box','on','Color',[1,1,1]*0.95,'EdgeColor','none');
set(gca, 'YTick',yTick , 'YTickLabel',lgLable,'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname','Times new Roman','color',[1,1,1]*0.9);
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
hold off;

 填充山脊图


data = randn(100,12)+[ 20 22 24 26 28 31 30 28 26 24 22 20];
lgLable= {'January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December'};
% colors=makeColorMap(winter,size(data, 2));
colors=makeColorMap(jet,size(data, 2));
figure('Position',[476 246 511 620])
p =0.2;
hold on;
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    pHandle = plot(x, fShifted,'color',colors(i,:),'LineWidth', 1.5,'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'Color', colors(i,:),'HandleVisibility', 'off')
    Xfill = [x, fliplr(x)];
    Yfill = [fShifted, ones(1, length(x)) * i * p];
    fill(Xfill, Yfill, pHandle.Color, 'EdgeColor', 'none', 'FaceAlpha', 0.3);
end
yTick = (1:size(data, 2)) * p;
ax = gca;
hold off;
set(ax, 'YTick', yTick, ...
    'YTickLabel', lgLable, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname','Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');

3D填充山脊图

data = randn(100,12)+[ 20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel= {'January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December'};
p = 0.2;
xTick=(1:size(data, 2))*p;
figure('Position',[476 246 511 620])
hold on;
colors=makeColorMap(hsv,size(data, 2));
legendHandles = zeros(size(data, 2), 1);
for i = 1:size(data, 2)
    [f, y] = ksdensity(data(:, i));
    xShifted = i * p;
    plot3(xShifted * ones(size(f)), y, f, 'LineWidth', 1.5, 'Color', colors(i,:), 'HandleVisibility', 'off');
    Yfill = [y, fliplr(y)];
    Xfill = [xShifted * ones(1, length(y)), xShifted * ones(1, length(y))];
    Zfill = [f, zeros(size(f))];
    legendHandles(i)  = fill3(Xfill, Yfill, Zfill, colors(i,:), 'EdgeColor', 'none', 'FaceAlpha', 0.3); 
end
grid off;
box on;
legend(lgLabel,'box','on','Color',[1,1,1]*0.95,'EdgeColor','none','FontName','Times New Roman','location','best');
set(gca, 'XTick',xTick, 'XTickLabel',lgLabel,'FontName','Times New Roman','linewidth',1)
xlabel('XXXX-Value');
ylabel('YYYY-Value');
zlabel('ZZZ-Value');
title('Ridge Plot');
view([-83.4000   71.6830])
hold off;

不同核山脊图、添加边际散点密度

data = randn(100,3)+[ 20  24 28];
colors=makeColorMap(jet,size(data, 2));
figure('Position',[476 246 511 620])
p=0;
hold on;
yTick=(1:size(data, 2))*p;
lineLength = 0.02; % 竖线的长度
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    pHandle = plot(x, fShifted, 'color', colors(i,:), 'LineWidth', 1.5, 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'Color', colors(i,:), 'HandleVisibility', 'off');
    Xfill = [x, fliplr(x)];
    Yfill = [fShifted, ones(1, length(x)) * i * p];
    fill(Xfill, Yfill, pHandle.Color, 'EdgeColor', 'none', 'FaceAlpha', 0.3);
    for j = 1:length(data(:, i))
        line([data(j, i), data(j, i)], [i * p, i * p + lineLength], 'Color', pHandle.Color, 'LineWidth', 1);
    end
end
grid off;box off;
ax=gca;
set(ax,'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname','Times new Roman','color',[1,1,1]*0.9);
ax.YLim=[0,1];
ax.XLim=[15,32];
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
hold off;

 

横坐标方向、全局渐变的散点图

data = randn(100,12)+[ 20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel={'January', 'February', 'March', 'April', 'May', 'June',
    'July', 'August', 'September', 'October', 'November', 'December'};
p = 0.2;
numColors = 256;
% 创建一个从紫色到红色再到黄色的颜色映射
colorMap =makeColorMap([0.1490    0.0353    0.5608;0.7305    0.2500    0.4922;0.9569    0.9490    0.1765],numColors);
% 计算全局的x轴范围
xMin = min(data, [], 'all');
xMax = max(data, [], 'all');
figure('Position',[476 246 511 620])
hold on;
for i = size(data, 2):-1:1
    [f(i,:), x] = ksdensity(data(:, i), 'Kernel', 'triangle');
    fShifted = f(i,:) + i * p; % 偏移每个分布
    plot(x, fShifted, 'LineWidth', 1.5, 'color', 'k', 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'HandleVisibility', 'off');
    for j = 1:length(x)-1
        Xfill = [x(j), x(j+1), x(j+1), x(j)];
        Yfill = [i * p, i * p, fShifted(j+1), fShifted(j)];
        % 计算当前点的颜色比例
        colorRatio = (x(j) - xMin) / (xMax - xMin);
        colorIdx = min(numColors, max(1, round(colorRatio * (numColors - 1)) + 1));
        fill(Xfill, Yfill, colorMap(colorIdx, :), 'EdgeColor', 'none', 'FaceAlpha', 0.9);
    end
end
% 设置轴标签和标题
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, ...
    'YTickLabel', lgLabel, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname','Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
% 设置颜色条
colormap(colorMap);
cBar = colorbar;
cBar.TickDirection = 'out';
cBar.LineWidth = 1;
cBar.TickLength = 0.02;
cBar.FontName = 'Times new Roman';
caxis([xMin,xMax]);
hold off;

横坐标方向、单核渐变图


data = randn(100,12) + [20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'};
numColors = 256; % 颜色数量
colors = jet(numColors); % 使用jet颜色映射
figure('Position',[476 246 511 620])
p = 0.2;
hold on;
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    plot(x, fShifted, 'LineWidth', 1.5, 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'HandleVisibility', 'off');
    colorGradient = linspace(1, numColors, length(x));
    for j = 1:length(x)-1
        Xfill = [x(j), x(j+1), x(j+1), x(j)];
        Yfill = [i * p, i * p, fShifted(j+1), fShifted(j)];
        fill(Xfill, Yfill, colors(round(colorGradient(j)), :), 'EdgeColor', 'none', 'FaceAlpha', 0.7);
    end
end
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, 'YTickLabel', lgLabel, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname', 'Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
colormap(colors);
cBar = colorbar;
cBar.TickDirection = 'out';
cBar.LineWidth = 1;
cBar.TickLength = 0.02;
cBar.FontName = 'Times new Roman';
hold off;

每个山脊图设置不同颜色,且添加边际散点图

data = randn(100,12)+[ 20 22 24 26 28 31 30 28 26 24 22 20];
lgLable = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'};
figure('Position', [476 246 511 620])
p = 0.3;
lineLength = 0.04; % 竖线的长度
colors=makeColorMap(hsv,size(data, 2));
hold on;
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    pHandle = plot(x, fShifted, 'color', colors(i,:), 'LineWidth', 1.5, 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'Color', colors(i,:), 'HandleVisibility', 'off');
    Xfill = [x, fliplr(x)];
    Yfill = [fShifted, ones(1, length(x)) * i * p];
    fill(Xfill, Yfill, pHandle.Color, 'EdgeColor', 'none', 'FaceAlpha', 0.3);
    for j = 1:length(data(:, i))
        line([data(j, i), data(j, i)], [i * p, i * p + lineLength], 'Color', 'k', 'LineWidth', 1);
    end
end
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, ...
    'YTickLabel', lgLable, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname', 'Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');

每个山脊图设置不同颜色单核横向颜色渐变

data = randn(100,12)+[ 20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel = {'January', 'February', 'March', 'April', 'May', 'June', ...
    'July', 'August', 'September', 'October', 'November', 'December'};
p = 0.2;
numColors = 256;
% 创建12个不同的颜色映射,每个月一个
colorMaps = cell(1, 12);
colorList={parula,turbo,hsv,hot,cool,spring,summer,autumn,winter,gray,bone,copper,pink,jet,lines,colorcube,prism,flag};
for i = 1:12
    colorMaps{i} = makeColorMap(colorList{i}, numColors);
end
% 计算全局的x轴范围
xMin = min(data, [], 'all');
xMax = max(data, [], 'all');
figure('Position', [476 246 511 620])
hold on;
for i = size(data, 2):-1:1
    [f(i,:), x] = ksdensity(data(:, i), 'Kernel', 'triangle');
    fShifted = f(i,:) + i * p; % 偏移每个分布
    plot(x, fShifted, 'LineWidth', 1.5, 'color', 'k', 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'HandleVisibility', 'off');
    currentColorMap = colorMaps{i};
    for j = 1:length(x)-1
        Xfill = [x(j), x(j+1), x(j+1), x(j)];
        Yfill = [i * p, i * p, fShifted(j+1), fShifted(j)];
        colorRatio = (x(j) - xMin) / (xMax - xMin);
        colorIdx = min(numColors, max(1, round(colorRatio * (numColors - 1)) + 1));
        fill(Xfill, Yfill, currentColorMap(colorIdx, :), 'EdgeColor', 'none', 'FaceAlpha', 0.9);
    end
end
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, ...
    'YTickLabel', lgLabel, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname', 'Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
hold off;

 

山脊图的 Y值映射颜色变化


data = randn(100,12) + [20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'};
numColors = 100; % 颜色数量
colors =makeColorMap(jet, numColors);
figure('Position',[476 246 511 620])
p = 0.2;
hold on;
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    plot(x, fShifted, 'LineWidth', 1.5, 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'HandleVisibility', 'off');
    % 计算整个分布的最小和最大纵坐标
    minY = min(fShifted);
    maxY = max(fShifted);
    for j = 1:length(x)-1
        Xfill = [x(j), x(j+1), x(j+1), x(j)];
        Yfill = [i * p, i * p, fShifted(j+1), fShifted(j)];
        avgY = mean(Yfill(3:4)); 
        colorIdx = round(((avgY - minY) / (maxY - minY)) * (numColors - 1)) + 1;
        fill(Xfill, Yfill, colors(colorIdx, :), 'EdgeColor', 'none', 'FaceAlpha', 0.6);
    end
end
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, 'YTickLabel', lgLabel, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname', 'Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
colormap(colors);
cBar = colorbar;
cBar.TickDirection = 'out';
cBar.LineWidth = 1;
cBar.TickLength = 0.02;
cBar.FontName = 'Times new Roman';
hold off;

四分位点

data = randn(100,12) + [20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'};
colors = makeColorMap(jet, size(data, 2));
figure('Position', [476 246 511 620])
p = 0.2;
hold on;
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    pHandle = plot(x, fShifted, 'color', colors(i,:), 'LineWidth', 1.5, 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'Color', colors(i,:), 'HandleVisibility', 'off')
    Xfill = [x, fliplr(x)];
    Yfill = [fShifted, ones(1, length(x)) * i * p];
    fill(Xfill, Yfill, pHandle.Color, 'EdgeColor', 'none', 'FaceAlpha', 0.3);
    % 计算并标记四分位点
    quartiles = quantile(data(:, i), [0.25 0.50 0.75]);
    for q = quartiles
        [~, idx] = min(abs(x-q));
        plot(q, fShifted(idx), 'o', 'MarkerFaceColor', pHandle.Color, 'MarkerEdgeColor', 'k');
    end
end
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, ...
    'YTickLabel', lgLabel, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname', 'Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
hold off;

data = randn(100,12) + [20 22 24 26 28 31 30 28 26 24 22 20];
lgLabel = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'};
colors = makeColorMap(jet, size(data, 2));
figure('Position', [476 246 511 620])
p = 0.2;
hold on;
for i = size(data, 2):-1:1
    [f, x] = ksdensity(data(:, i));
    fShifted = f + i * p;
    pHandle = plot(x, fShifted, 'color', colors(i,:), 'LineWidth', 1.5, 'HandleVisibility', 'off');
    yline(i * p, '-.', 'LineWidth', 1, 'Color', colors(i,:), 'HandleVisibility', 'off');
    Xfill = [x, fliplr(x)];
    Yfill = [fShifted, ones(1, length(x)) * i * p];
    fill(Xfill, Yfill, pHandle.Color, 'EdgeColor', 'none', 'FaceAlpha', 0.3);
    % 计算并标记四分位点,并绘制竖线
    quartiles = quantile(data(:, i), [0.25 0.50 0.75]);
    for q = quartiles
        [~, idx] = min(abs(x-q));
        plot(q, fShifted(idx), 'o', 'MarkerFaceColor', pHandle.Color, 'MarkerEdgeColor', 'k');
        line([q q], [fShifted(idx) i * p], 'Color', pHandle.Color, 'LineStyle', '-.','LineWidth', 1);
    end
end
yTick = (1:size(data, 2)) * p;
set(gca, 'YTick', yTick, ...
    'YTickLabel', lgLabel, ...
    'LineWidth', 1.5, 'XMinorTick', 'on', 'TickDir', 'out', ...
    'fontname', 'Times new Roman');
xlabel('XXXX-Value');
ylabel('YYYY-Value');
title('Ridge Plot');
hold off;

其中makeColorMap函数代码之前「一张图搞定绘图配色问题」有详细介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 Lua 写一个爬虫程序

你想要基于 Lua 写一个爬虫程序来爬取的内容。我可以给你一个基本的框架,但是请注意这只是一个示例,并且你可能需要根据实际情况进行调整。 -- 首先,我们需要引入一些必要的模块 local http require "socket.http" local json r…

Spring Boot项目优雅实现读写分离

文章目录 1. 读写分离简介2. Spring Boot集成MyBatis3. 配置读写分离数据源4. 定义数据源上下文5. 自定义注解和切面6. 在Service层使用注解7. 拓展与分析7.1 多数据源的选择7.2 事务的处理7.3 异常处理7.4 动态数据源切换7.5 Spring Boot版本适配 🎉欢迎来到架构设…

如何将 .SQL 文件导入到 IDEA自带的MySQL中

首先连接数据库新建数据库右键选择该数据库选择如下:找到对应的sql文件即可

工作常遇,Web自动化测试疑难解答,测试老鸟带你一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、自动化测试中隐…

mac项目流程管理 OmniPlan Pro 4 中文最新 for mac

在OmniPlan Pro 4中,用户可以创建详细的项目计划,包括任务、资源、时间表、预算等设置。同时,软件支持任务管理,让用户能够创建、编辑和删除任务,设置任务的优先级、依赖关系、持续时间、起始日期等。对于资源管理&…

记一次 .NET 某券商论坛系统 卡死分析

一:背景 1. 讲故事 前几个月有位朋友找到我,说他们的的web程序没有响应了,而且监控发现线程数特别高,内存也特别大,让我帮忙看一下怎么回事,现在回过头来几经波折,回味价值太浓了。 二&#…

图论17-有向图的强联通分量-Kosaraju算法

文章目录 1 概念2 Kosaraju算法2.1 在图类中设计反图2.2 强连通分量的判断和普通联通分量的区别2.3 代码实现 1 概念 2 Kosaraju算法 对原图的反图进行DFS的后序遍历。 2.1 在图类中设计反图 // 重写图的构造函数public Graph(TreeSet<Integer>[] adj, boolean dire…

又双叒!宏电5G RedCap工业智能网关获得首个基于RedCap终端场景的华为技术认证

近日&#xff0c;宏电Z2 V20 5G RedCap工业智能网关率先通过华为OpenLab全球开放实验室的系列严格验证流程&#xff0c;完成基于华为RedCap终端场景的兼容性测试&#xff0c;首个获得华为Cloud Open Labs授予的HUAWEI COMPATIBLE证书及其相关认证徽标使用权。 宏电5G RedCap工业…

Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)

作者&#xff1a;JOE MCELROY 什么是检索增强生成 (RAG) 以及该技术如何通过提供相关源知识作为上下文来帮助提高 LLMs 生成的响应的质量。 生成式人工智能最近取得了巨大的成功和令人兴奋的成果&#xff0c;其模型可以生成流畅的文本、逼真的图像&#xff0c;甚至视频。 就语…

【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时

【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时 文章目录 导入库定时器初始化延时函数定时中断回调调用附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 首先 这个定时器是硬件底层级别的 优先级最高 如果调用 会导致GNSS等线程…

理疗养生服务预约小程序要如何做

不少人面对身体症状疼痛&#xff0c;往往不会选择去医院&#xff0c;而是去理疗养生馆&#xff0c;选择艾灸、拔罐、中药贴敷等方式治疗改善或减轻疼痛。随着人们对中医信赖度增强&#xff0c;理疗养生市场增长迅速。 而在增长的同时&#xff0c;我们也注意到理疗养生馆经营痛…

Java版B/S架构云his医院信息管理系统源码(springboot框架)

一、技术框架 ♦ 前端&#xff1a;AngularNginx ♦ 后台&#xff1a;JavaSpring&#xff0c;SpringBoot&#xff0c;SpringMVC&#xff0c;SpringSecurity&#xff0c;MyBatisPlus&#xff0c;等 ♦ 数据库&#xff1a;MySQL MyCat ♦ 缓存&#xff1a;RedisJ2Cache ♦ 消息队…

工作汇报怎么写?建议收藏

整体思路与模块&#xff1a; 背景/事件 成果展示 推动落实的方法论 收获与成长 存在的不足及改进措施 下一步工作安排 支持&#xff08;选&#xff09; 一、背景/事件 对于区分“功能性总结”和“应付性总结”&#xff0c;在背景/事件方面有一个关键点 是报告是否具有…

Linux 系统目录结构

Linux 系统目录结构 登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里存放…

第二章 (导数与微分)

导数简介 路程与时间关系函数 就是 速度与时间关系函数 的 原函数。 路程与时间关系函数 求导 &#xff08;或者叫导函数&#xff09; —————求导—————> 就是 vt关系的导数 求导得到》导函数 导函数积分 得到 原函数 你一开始速度为0&#xff0c;然后速度不断…

Perl的LWP::UserAgent库爬虫程序怎么写

Perl的LWP::UserAgent库是一个用于发送HTTP请求的Perl模块。它可以用于编写Web爬虫、测试Web应用程序、自动化Web操作等。以下是一个简单的使用LWP::UserAgent库发送HTTP GET请求的Perl脚本的例子&#xff1a; #!/usr/bin/perluse strict; use warnings; use LWP::UserAgent;# …

【移远QuecPython】EC800M物联网开发板的音乐播放(PWM蜂鸣器播放生日快乐歌,Sound模块播放音频)

【移远QuecPython】EC800M物联网开发板的音乐播放&#xff08;PWM蜂鸣器播放生日快乐歌&#xff0c;Sound模块播放音频&#xff09; 效果&#xff1a; 【移远QuecPython】EC800M开发板外置功放重金属和PWM音调&#xff08;BUG调试记录&#xff09; 文章目录 PWM蜂鸣器播放播放…

Java 通过POI快速导入带图片的excel并且图片不会丢失

## 通过POI快速导入带图片的excel并且图片不会丢失导入带图片的excel,这里也是研究了很久,在之前的博客中也有说明过,在项目使用过程中,发现很多时候导入响应很慢,而且每次导入图片都会丢失几张,所以又花了点时间研究修改了下,具体如下: 这边在导入时,通过自定义注解…

基于rosbridge 与业务系统长链接网关架构设计

技术背景&#xff1a; 业务系统&#xff1a;管理机器人&#xff0c;机器人任务执行等等 机器人使用是ros1 &#xff0c;业务系统与机器人交互使用rosbridge, rosbridge 就是websocket 链接&#xff0c;所以就有了如下的一些架构思想 架构图 客户端 客户端主要分为app端、pc端…

批量整理相同名称文件,高效归类至指定文件夹!

你是否曾经遇到过成百上千的文件名重复&#xff0c;让人无从下手的情况&#xff1f;现在&#xff0c;我们为你带来了一款全新的文件管理工具&#xff0c;它可以让你轻松地将相同名称的文件批量整理归类到指定文件夹中&#xff0c;让你的文件管理更加高效、有序&#xff01; 第…