MATLAB|科研绘图|山脊图

news2024/11/22 15:40:43

效果图

山脊图介绍

山脊图(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函数代码之前「一张图搞定绘图配色问题」有详细介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JTS: 20 InteriorPoint 内部中心点

文章目录 版本代码 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 package pers.stu.algorithm;import org.locationtech.jts.algorithm.InteriorPoint; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; i…

FusionDiff:第一个基于扩散模型实现的多聚焦图像融合的论文

文章目录 1. 论文介绍2. 研究动机3. 模型结构3.1 网络架构3.2 前向扩散过程3.3 逆向扩散过程3.4 训练和推理过程 4. 小样本学习4. 实验结果 1. 论文介绍 题目:FusionDiff: Multi-focus image fusion using denoising diffusion probabilistic models 作者&#xf…

微服务全链路监控技术的实践路径

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:加入1000人软件测试技术学习交流群📢资源分享:进了字节跳动之后,才…

【自动化测试】Jenkins持续集成-设置执行环境+构建触发器(超细整理)

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

SSL证书为什么那么贵?有便宜的吗?

SSL证书在网络安全中扮演着关键的角色,确保数据传输的机密性和完整性。然而,SSL证书的价格差异却常常让人感到疑惑,为何有些证书如此昂贵,而另一些则相对便宜?这个问题涉及到多个因素,包括证书类型、品牌声…

【图的定义和术语,图的类型定义】

文章目录 图的定义和术语图的类型定义 图的定义和术语 图:G(V,E)V:顶点(数据元素)的有穷非空集合。 E:边的有穷集合。 无向图:每条边都是无方向的。 有向图:每条边都是有方向的。 …

新公众号没有留言功能怎么办?如何设置留言?

为什么公众号没有留言功能?根据要求,自2018年2月12日起,新申请的微信公众号默认无留言功能。有些人听过一个说法:公众号粉丝累计到一定程度或者原创文章数量累计到一定程度就可以开通留言功能。其实这个方法是2018年之前才可以&am…

数据结构第三课 -----线性表之双向链表

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

全网火爆,Python接口自动化测试Mock服务详细总结(实战场景)

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

GitHub加速配置

1. 找到要加速的域名 GitHub:github.com(这只是加载主页面的)GitHub下载:codeload.github.com(不唯一,自己去下载链接看) 2. 用域名到DNS解析服务器地址 ITDOG 3. 修改 Hosts 文件 依据解…

PicoDiagnostics (NVH设备软件)-PS软件设置文件类型介绍

作为远程技术指导人员&#xff0c;下面这个功能对你来说可能非常有帮助。 在PicoScope 7 软件的文件保存格式里&#xff0c;通常选择的是<PS 数据文件>类型&#xff0c;容易忽略其他实用的保存文件类型&#xff0c;下面我们介绍<PS设置文件>类型。 PS 数据文件&…

深入理解计算机系统 笔记

写在前面 记录一下《深入理解计算机系统》中的要点。 一、第一章 计算机系统漫游 1. 程序的编译周期 最初编写的源程序xxx.c是一个文本文件&#xff1b;编译系统把源程序编译到可执行目标程序需要经过如下4个阶段&#xff1b; 1.1 预处理阶段 由预处理器&#xff08;cpp&a…

【带头学C++】----- 六、结构体 ---- 6.1 结构体概述

6.1 结构体概述&#xff08;struct&#xff09; 结构体&#xff08;struct&#xff09;是C中用于自定义数据类型的一种机制&#xff0c;它允许将多个不同类型的变量&#xff08;成员变量&#xff09;组合在一起形成一个新的数据类型。结构体允许程序员创建一个包含不同数据类型…

HPV转阴如何合理饮食,对此HPV专家谭巍主任提出自己看法

HPV感染不是小事&#xff0c;如果体内长期携带病毒不转阴&#xff0c;则有可能引发一系列病变。但在HPV转阴方面饮食有着不可或缺的作用&#xff0c;合理饮食对于促进HPV转阴至关重要。而关于HPV人群合理饮食问题&#xff0c;劲松HPV防治诊疗中心主任谭巍将提出一些建议&#x…

数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品&#xff0c;支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据&#xff0c;已应用于数百家企业生产&#xff0c;也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

【shardingjdbc】sharding-jdbc分库分表入门demo及原理分析

文章目录 场景配置&#xff1a;概念及原理:代码:思考: 本文中&#xff0c;demo案例涉及场景为sharding jdbc的分库情况。 通俗点说就是由原来的db0_table水平拆分为 db1 t_table &#xff0c;db2.t_table。 demo本身很简单&#xff0c;难点在于分片策略配置到底该怎么写&#x…

宝马所有发动机号码的位置以及型号说明

每个汽车制造商都会为自己生产的汽车底盘和发动机分配一个内部代码&#xff0c;以标识研发和生产项目&#xff0c;而宝马对这些底盘代码和发动机代码更是规划的井井有条&#xff0c;比如发动机有M、N、B、S、P或W等代码标识&#xff0c;而底盘和车身则有E、F、G或i等代码标识。…

2FRE16-43/160LBK4M比例流量阀放大器

比例阀控制放大器技术是电液比例系统中的一个重要组成部分&#xff0c;它主要负责对比例阀进行控制。这种技术可以实现对液压流量或压力的精确控制&#xff0c;从而使系统以更高的精度和更快的响应速度执行各种操作。 比例阀控制放大器主要由三个部分组成&#xff1a;比例阀、…

58 权限提升-网站权限后台漏洞第三方获取

目录 当前知识点在渗透流程中的点当前知识点在权限提升的重点当前知识点权限提升权限介绍利用成功后的思想需要总结的思路演示案例:某挂壁程序后台权限提升-后台功能某BC广告导航页权限提升-漏洞层面苏丹大西瓜GlassFish中间件-第三方 涉及资源 这里包括网站权限、其它权限、系…

自己搭设开源密码管理工具 bitwarden

简介 Bitwarden是一款自由且开源的密码管理服务&#xff0c;用户可在加密的保管库中存储敏感信息&#xff08;例如网站登录凭据&#xff09;。Bitwarden平台提供有多种客户端应用程序&#xff0c;包括网页用户界面、桌面应用&#xff0c;浏览器扩展、移动应用以及命令行界面。[…