MATLAB | 繪圖復刻(十一) | 截斷的含散點及誤差棒的分組柱狀圖

hey大家好久不見,本期帶來一篇繪圖復刻,居然已經出到第11篇了,不知道有朝一日有沒有機會破百,本期繪制的是《PNAS》期刊中pnas.2200057120文章的figure03,文章題目為Intranasal delivery of full-length anti-Nogo-A antibody: A potential alternative route for therapeutic antibodies to central nervous system targets可在以下網址下載該文章pdf原文:

  • https://www.pnas.org/doi/epdf/10.1073/pnas.2200057120

本期要復刻的繪圖長這樣:

本人復刻的效果長這樣:

雖然還是有些許不同但是大部分元素已經還原出來了,以下為教程部分:

請盡量使用新版本的MATLAB,比較舊版本的MATLAB無XJitter功能,本人目前較忙近期不會有空開發類似功能,因此在我未有空開發相關功能前,請盡量使用比較新的版本!!!!!!!!~


教程部分

0 數據準備

這里隨便隨機生成了一點數據,文章中的五個顏色都被我提取了出來,我們這次先取用前兩個顏色:

figure('Units','normalized','Position',[.2,.3,.36,.45],'Color','w');rng(24)
% 隨機生成了兩組數據
DataA = rand(7,1)*ones(1,5).*2+rand(7,5)./3.5;
DataB = rand(7,1)*ones(1,5)./2+rand(7,5)./3.5;
meanData = [mean(DataA,2), mean(DataB,2)];% 文章圖片中的顏色數據
CList = [188,188,240; 160,161,166; 237,187,128;177,202,233; 245,185,192]./255;
CList = CList([1,2],:);
% CList = CList([4,5],:);% 橫坐標標簽文本
NameList = {'Cortex';'Hippocampus';'Cerebellum';'Brainstem';'Cervical spinal cord';'Thoracic spinal cord';'Lumbar spinal cord'};

1 基礎繪圖

柱狀圖

hold on
% 繪制柱狀圖 ---------------------------------------------------------------
barHdl = bar(meanData,'EdgeColor','none','FaceAlpha',.5,'BarWidth',.7);
% 修改配色
barHdl(1).FaceColor = CList(1,:);
barHdl(2).FaceColor = CList(2,:);

散點圖

% 繪制散點圖 ---------------------------------------------------------------
XA = barHdl(1).XEndPoints.'*ones(1,size(DataA,2));
scatter(XA(:),DataA(:),55,'filled','o','MarkerEdgeColor','k','LineWidth',.8,...'CData',CList(1,:),'XJitter','rand','XJitterWidth',0.15)
XB = barHdl(2).XEndPoints.'*ones(1,size(DataB,2));
scatter(XB(:),DataB(:),55,'filled','o','MarkerEdgeColor','k','LineWidth',.8,...'CData',CList(2,:),'XJitter','rand','XJitterWidth',0.15)

誤差棒

這里直接用的標準差:

% 繪制誤差棒 ---------------------------------------------------------------
errorbar(barHdl(1).XEndPoints,meanData(:,1),std(DataA,0,2),'vertical',...'LineStyle','none','LineWidth',1,'Color','k')
errorbar(barHdl(2).XEndPoints,meanData(:,2),std(DataB,0,2),'vertical',...'LineStyle','none','LineWidth',1,'Color','k')


3 坐標區域簡單修飾

主要是調整字體,并修改X軸刻度標簽:

% 繪制誤差棒 ---------------------------------------------------------------
errorbar(barHdl(1).XEndPoints,meanData(:,1),std(DataA,0,2),'vertical',...'LineStyle','none','LineWidth',1,'Color','k')
errorbar(barHdl(2).XEndPoints,meanData(:,2),std(DataB,0,2),'vertical',...'LineStyle','none','LineWidth',1,'Color','k')


4 截斷坐標軸

這里用的我之前寫的一個函數,為了怕大家找起來麻煩,放在了文末及文末的gitee倉庫里。

以下是調用文末截斷坐標軸函數實現的:

% 截斷坐標軸
truncAxis('y',[1,1.4]);


5 坐標軸精修

包括隱藏baseline,添加Y軸標簽,修改坐標軸粗細及刻度方向等:

fig = gcf;
ax1 = fig.Children(1);
ax2 = fig.Children(2);% 隱藏基線
ax1.XColor = 'none';
ax1.Children(end).BaseLine.Color = 'none';% 坐標軸修飾
ax1.LineWidth = 1.5; 
ax2.LineWidth = 1.5;
ax1.TickDir = 'out';
ax2.TickDir = 'out';% 增添Y軸標簽
ax1.YLabel.String = 'ug of Ab/ g wet weight of tissue';
ax1.YLabel.Position = [0 1.4 -1];
ax1.YLabel.FontSize = 15;


6 添加顯著性標注

就一個柱子一個柱子加吧,改改序號和字符就能得到比較符合想法的效果:

% 隨便加點顯著性標志N = 2; % 第二個柱
S = '***';
% 要修改右側柱請改成barHdl(2)及DataB(N,:)
X = barHdl(1).XEndPoints(N);
Y = max(DataA(N,:))+.1;
errorbar(X,Y,.2,'horizontal','LineStyle','none','LineWidth',1,'Color','k')
text(X,Y,S,'FontSize',15,'FontWeight','bold','FontName','Arial',...'HorizontalAlignment','center','VerticalAlignment','baseline')N = 3; % 第三個柱
S = '****';
% 要修改右側柱請改成barHdl(2)及DataB(N,:)
X = barHdl(1).XEndPoints(N);
Y = max(DataA(N,:))+.1;
errorbar(X,Y,.2,'horizontal','LineStyle','none','LineWidth',1,'Color','k')
text(X,Y,S,'FontSize',15,'FontWeight','bold','FontName','Arial',...'HorizontalAlignment','center','VerticalAlignment','baseline')N = 6; % 第六個柱
S = '****';
% 要修改右側柱請改成barHdl(2)及DataB(N,:)
X = barHdl(1).XEndPoints(N);
Y = max(DataA(N,:))+.1;
errorbar(X,Y,.2,'horizontal','LineStyle','none','LineWidth',1,'Color','k')
text(X,Y,S,'FontSize',15,'FontWeight','bold','FontName','Arial',...'HorizontalAlignment','center','VerticalAlignment','baseline')


更多顏色展示


完整代碼

教程完整代碼

% code for pnas.2200057120fig03
% by slandarer
% bar chart with trunc-axisfigure('Units','normalized','Position',[.2,.3,.36,.45],'Color','w');rng(24)
% 隨機生成了兩組數據
DataA = rand(7,1)*ones(1,5).*2+rand(7,5)./3.5;
DataB = rand(7,1)*ones(1,5)./2+rand(7,5)./3.5;
meanData = [mean(DataA,2), mean(DataB,2)];% 文章圖片中的顏色數據
CList = [188,188,240; 160,161,166; 237,187,128;177,202,233; 245,185,192]./255;
CList = CList([1,2],:);
% CList = CList([4,5],:);% 橫坐標標簽文本
NameList = {'Cortex';'Hippocampus';'Cerebellum';'Brainstem';'Cervical spinal cord';'Thoracic spinal cord';'Lumbar spinal cord'};hold on
% 繪制柱狀圖 ---------------------------------------------------------------
barHdl = bar(meanData,'EdgeColor','none','FaceAlpha',.5,'BarWidth',.7);
% 修改配色
barHdl(1).FaceColor = CList(1,:);
barHdl(2).FaceColor = CList(2,:);
% 繪制散點圖 ---------------------------------------------------------------
XA = barHdl(1).XEndPoints.'*ones(1,size(DataA,2));
scatter(XA(:),DataA(:),55,'filled','o','MarkerEdgeColor','k','LineWidth',.8,...'CData',CList(1,:),'XJitter','rand','XJitterWidth',0.15)
XB = barHdl(2).XEndPoints.'*ones(1,size(DataB,2));
scatter(XB(:),DataB(:),55,'filled','o','MarkerEdgeColor','k','LineWidth',.8,...'CData',CList(2,:),'XJitter','rand','XJitterWidth',0.15)
% 繪制誤差棒 ---------------------------------------------------------------
errorbar(barHdl(1).XEndPoints,meanData(:,1),std(DataA,0,2),'vertical',...'LineStyle','none','LineWidth',1,'Color','k')
errorbar(barHdl(2).XEndPoints,meanData(:,2),std(DataB,0,2),'vertical',...'LineStyle','none','LineWidth',1,'Color','k')% 坐標區域簡單修飾
ax = gca;
ax.XTick = 1:length(barHdl(1).XEndPoints);
ax.XTickLabel = NameList(:);
ax.FontName = 'Arial';
ax.FontWeight = 'bold';
ax.FontSize = 11;
ax.XTickLabelRotation = 35;% 截斷坐標軸
truncAxis('y',[1,1.4]);
fig = gcf;
ax1 = fig.Children(1);
ax2 = fig.Children(2);% 隱藏基線
ax1.XColor = 'none';
ax1.Children(end).BaseLine.Color = 'none';% 坐標軸修飾
ax1.LineWidth = 1.5; 
ax2.LineWidth = 1.5;
ax1.TickDir = 'out';
ax2.TickDir = 'out';% 增添Y軸標簽
ax1.YLabel.String = 'ug of Ab/ g wet weight of tissue';
ax1.YLabel.Position = [0 1.4 -1];
ax1.YLabel.FontSize = 15;% -------------------------------------------------------------------------
% 隨便加點顯著性標志N = 2; % 第二個柱
S = '***';
% 要修改右側柱請改成barHdl(2)及DataB(N,:)
X = barHdl(1).XEndPoints(N);
Y = max(DataA(N,:))+.1;
errorbar(X,Y,.2,'horizontal','LineStyle','none','LineWidth',1,'Color','k')
text(X,Y,S,'FontSize',15,'FontWeight','bold','FontName','Arial',...'HorizontalAlignment','center','VerticalAlignment','baseline')N = 3; % 第三個柱
S = '****';
% 要修改右側柱請改成barHdl(2)及DataB(N,:)
X = barHdl(1).XEndPoints(N);
Y = max(DataA(N,:))+.1;
errorbar(X,Y,.2,'horizontal','LineStyle','none','LineWidth',1,'Color','k')
text(X,Y,S,'FontSize',15,'FontWeight','bold','FontName','Arial',...'HorizontalAlignment','center','VerticalAlignment','baseline')N = 6; % 第六個柱
S = '****';
% 要修改右側柱請改成barHdl(2)及DataB(N,:)
X = barHdl(1).XEndPoints(N);
Y = max(DataA(N,:))+.1;
errorbar(X,Y,.2,'horizontal','LineStyle','none','LineWidth',1,'Color','k')
text(X,Y,S,'FontSize',15,'FontWeight','bold','FontName','Arial',...'HorizontalAlignment','center','VerticalAlignment','baseline')

截斷坐標軸工具函數完整代碼

function truncAxis(varargin)
% @author : slandarer
% gzh  : slandarer隨筆% 獲取參數
if isa(varargin{1},'matlab.graphics.axis.Axes')ax=varargin{1};varargin(1)=[];
elseax=gca;
end
hold(ax,'on');
% box(ax,'off')
ax.XAxisLocation='bottom';
ax.YAxisLocation='left';
axisPos=ax.Position;
axisXLim=ax.XLim;
axisYLim=ax.YLim;
axisXScale=diff(axisXLim);
axisYScale=diff(axisYLim);
truncRatio=1/20;
Xtrunc=[];Ytrunc=[];
for i=1:length(varargin)-1switch truecase strcmpi('X',varargin{i}),Xtrunc=varargin{i+1};case strcmpi('Y',varargin{i}),Ytrunc=varargin{i+1};end
end
switch truecase isempty(Xtrunc)% 復制坐標區域ax2=copyAxes(ax);% 修改軸基礎屬性ax2.XTickLabels=[];ax2.XColor='none';% 修改坐標區域范圍ax.YLim=[axisYLim(1),Ytrunc(1)];ax2.YLim=[Ytrunc(2),axisYLim(2)];% 坐標區域重定位ax.Position(4)=axisPos(4)*(1-truncRatio)/(axisYScale-diff(Ytrunc))*(Ytrunc(1)-axisYLim(1));ax2.Position(2)=axisPos(2)+ax.Position(4)+axisPos(4)*truncRatio;ax2.Position(4)=axisPos(4)*(1-truncRatio)/(axisYScale-diff(Ytrunc))*(axisYLim(2)-Ytrunc(2));% 鏈接軸范圍變動linkaxes([ax,ax2],'x')% 添加線和標識符if strcmp(ax.Box,'on')ax.Box='off';ax2.Box='off';annotation('line',[1,1].*(ax.Position(1)+ax.Position(3)),[ax.Position(2),ax.Position(2)+ax.Position(4)],'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax.Position(1)+ax.Position(3)),[ax2.Position(2),ax2.Position(2)+ax2.Position(4)],'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax2.Position(2)+ax2.Position(4)),'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);elseannotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax.Position(2)+ax.Position(4)),'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax2.Position(2)),'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);endcreateSlash([ax.Position(1)-.2,ax.Position(2)+ax.Position(4)-.2,.4,.4])createSlash([ax.Position(1)-.2,ax2.Position(2)-.2,.4,.4])createSlash([ax.Position(1)+ax.Position(3)-.2,ax.Position(2)+ax.Position(4)-.2,.4,.4])createSlash([ax.Position(1)+ax.Position(3)-.2,ax2.Position(2)-.2,.4,.4])case isempty(Ytrunc) % 復制坐標區域ax2=copyAxes(ax);% 修改軸基礎屬性ax2.YTickLabels=[];ax2.YColor='none';% 修改坐標區域范圍ax.XLim=[axisXLim(1),Xtrunc(1)];ax2.XLim=[Xtrunc(2),axisXLim(2)];% 坐標區域重定位ax.Position(3)=axisPos(3)*(1-truncRatio)/(axisXScale-diff(Xtrunc))*(Xtrunc(1)-axisXLim(1));ax2.Position(1)=axisPos(1)+ax.Position(3)+axisPos(3)*truncRatio;ax2.Position(3)=axisPos(3)*(1-truncRatio)/(axisXScale-diff(Xtrunc))*(axisXLim(2)-Xtrunc(2));% 鏈接軸范圍變動linkaxes([ax,ax2],'y')% 添加線和標識符if strcmp(ax.Box,'on')ax.Box='off';ax2.Box='off';annotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax.Position(2)+ax.Position(4)),'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax2.Position(1),ax2.Position(1)+ax2.Position(3)],[1,1].*(ax.Position(2)+ax.Position(4)),'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax2.Position(1)+ax2.Position(3)),[ax2.Position(2),ax2.Position(2)+ax2.Position(4)],'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);elseannotation('line',[1,1].*(ax.Position(1)+ax.Position(3)),[ax2.Position(2),ax2.Position(2)+ax2.Position(4)],'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax2.Position(1)),[ax2.Position(2),ax2.Position(2)+ax2.Position(4)],'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);endcreateSlash([ax.Position(1)+ax.Position(3)-.2,ax.Position(2)-.2,.4,.4])createSlash([ax2.Position(1)-.2,ax.Position(2)-.2,.4,.4])createSlash([ax.Position(1)+ax.Position(3)-.2,ax.Position(2)+ax.Position(4)-.2,.4,.4])createSlash([ax2.Position(1)-.2,ax.Position(2)+ax.Position(4)-.2,.4,.4])case (~isempty(Ytrunc))&(~isempty(Ytrunc))% 復制坐標區域ax2=copyAxes(ax);ax3=copyAxes(ax);ax4=copyAxes(ax);% 修改軸基礎屬性ax2.XTickLabels=[];ax2.XColor='none';ax3.XTickLabels=[];ax3.XColor='none';ax3.YTickLabels=[];ax3.YColor='none';ax4.YTickLabels=[];ax4.YColor='none';% 修改坐標區域范圍ax.YLim=[axisYLim(1),Ytrunc(1)];ax.XLim=[axisXLim(1),Xtrunc(1)];ax2.XLim=[axisXLim(1),Xtrunc(1)];ax2.YLim=[Ytrunc(2),axisYLim(2)];ax3.XLim=[Xtrunc(2),axisXLim(2)];ax3.YLim=[Ytrunc(2),axisYLim(2)];ax4.XLim=[Xtrunc(2),axisXLim(2)];ax4.YLim=[axisYLim(1),Ytrunc(1)];% 坐標區域重定位ax.Position(3)=axisPos(3)*(1-truncRatio)/(axisXScale-diff(Xtrunc))*(Xtrunc(1)-axisXLim(1));ax.Position(4)=axisPos(4)*(1-truncRatio)/(axisYScale-diff(Ytrunc))*(Ytrunc(1)-axisYLim(1));ax2.Position(2)=axisPos(2)+ax.Position(4)+axisPos(4)*truncRatio;ax2.Position(3)=axisPos(3)*(1-truncRatio)/(axisXScale-diff(Xtrunc))*(Xtrunc(1)-axisXLim(1));ax2.Position(4)=axisPos(4)*(1-truncRatio)/(axisYScale-diff(Ytrunc))*(axisYLim(2)-Ytrunc(2));ax3.Position(1)=axisPos(1)+ax.Position(3)+axisPos(3)*truncRatio;ax3.Position(2)=axisPos(2)+ax.Position(4)+axisPos(4)*truncRatio;ax3.Position(3)=axisPos(3)*(1-truncRatio)/(axisXScale-diff(Xtrunc))*(axisXLim(2)-Xtrunc(2));ax3.Position(4)=axisPos(4)*(1-truncRatio)/(axisYScale-diff(Ytrunc))*(axisYLim(2)-Ytrunc(2));ax4.Position(1)=axisPos(1)+ax.Position(3)+axisPos(3)*truncRatio;ax4.Position(3)=axisPos(3)*(1-truncRatio)/(axisXScale-diff(Xtrunc))*(axisXLim(2)-Xtrunc(2));ax4.Position(4)=axisPos(4)*(1-truncRatio)/(axisYScale-diff(Ytrunc))*(Ytrunc(1)-axisYLim(1));% 鏈接軸范圍變動linkaxes([ax3,ax2],'y')linkaxes([ax4,ax3],'x')linkaxes([ax,ax2],'x')linkaxes([ax,ax4],'y')% 添加線和標識符if strcmp(ax.Box,'on')ax.Box='off';ax2.Box='off';ax3.Box='off';ax4.Box='off';annotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax2.Position(2)+ax2.Position(4)),'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax3.Position(1),ax3.Position(1)+ax3.Position(3)],[1,1].*(ax2.Position(2)+ax2.Position(4)),'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax4.Position(1)+ax4.Position(3)),[ax3.Position(2),ax3.Position(2)+ax3.Position(4)],'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax4.Position(1)+ax4.Position(3)),[ax4.Position(2),ax4.Position(2)+ax4.Position(4)],'LineStyle','-','LineWidth',ax.LineWidth,'Color',ax.XColor);elseannotation('line',[1,1].*(ax.Position(1)+ax.Position(3)),[ax2.Position(2),ax2.Position(2)+ax2.Position(4)],'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax3.Position(1)),[ax2.Position(2),ax2.Position(2)+ax2.Position(4)],'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax.Position(1)+ax.Position(3)),[ax.Position(2),ax.Position(2)+ax.Position(4)],'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[1,1].*(ax3.Position(1)),[ax.Position(2),ax.Position(2)+ax.Position(4)],'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax.Position(2)+ax.Position(4)),'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax.Position(1),ax.Position(1)+ax.Position(3)],[1,1].*(ax2.Position(2)),'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax4.Position(1),ax4.Position(1)+ax4.Position(3)],[1,1].*(ax.Position(2)+ax.Position(4)),'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);annotation('line',[ax4.Position(1),ax4.Position(1)+ax4.Position(3)],[1,1].*(ax2.Position(2)),'LineStyle',':','LineWidth',ax.LineWidth,'Color',ax.XColor);endcreateSlash([ax.Position(1)-.2,ax.Position(2)+ax.Position(4)-.2,.4,.4])createSlash([ax.Position(1)-.2,ax2.Position(2)-.2,.4,.4])createSlash([ax4.Position(1)+ax4.Position(3)-.2,ax.Position(2)+ax.Position(4)-.2,.4,.4])createSlash([ax4.Position(1)+ax4.Position(3)-.2,ax2.Position(2)-.2,.4,.4])createSlash([ax.Position(1)+ax.Position(3)-.2,ax.Position(2)-.2,.4,.4])createSlash([ax.Position(1)+ax.Position(3)-.2,ax2.Position(2)+ax2.Position(4)-.2,.4,.4])createSlash([ax4.Position(1)-.2,ax.Position(2)-.2,.4,.4])createSlash([ax4.Position(1)-.2,ax2.Position(2)+ax2.Position(4)-.2,.4,.4])% 修改當前坐標區域,方便legend添加set(gcf,'currentAxes',ax3)
end
% 復制原坐標區域全部可復制屬性function newAX=copyAxes(ax)axStruct=get(ax);fNames=fieldnames(axStruct);newAX=axes('Parent',ax.Parent);coeList={'CurrentPoint','XAxis','YAxis','ZAxis','BeingDeleted',...'TightInset','NextSeriesIndex','Children','Type','Legend'};for n=1:length(coeList)coePos=strcmp(fNames,coeList{n});fNames(coePos)=[];endfor n=1:length(fNames)newAX.(fNames{n})=ax.(fNames{n});endcopyobj(ax.Children,newAX)end
% 添加截斷標識符函數function createSlash(pos)anno=annotation('textbox');anno.String='/';anno.LineStyle='none';anno.FontSize=15;anno.Position=pos;anno.FitBoxToText='on';anno.VerticalAlignment='middle';anno.HorizontalAlignment='center';end
end

以上已經是本文全部內容,若懶得復制代碼,可以去以下gitee倉庫獲取全部代碼:

https://gitee.com/slandarer/PLTreprint/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38301.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38301.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Debian/Ubuntu清理硬盤空間

Debian/Ubuntu清理硬盤空間_debian清理磁盤空間_weixin_43606319的博客-CSDN博客 1. 刪除殘余的配置文件 通常Debian/Ubuntu刪除軟件包可以用兩條命令 sudo apt-get remove <package-name> sudo apt-get purge <package-name> remove將會刪除軟件包&#xff0…

量化交易接口如何實現量化交易?(程序化交易接口)API

量化交易接口是通過連接投資者的交易賬戶和量化交易系統&#xff08;程序化交易系統&#xff09;&#xff0c;實現自動化的交易操作。以下是量化交易接口實現量化交易的一般步驟&#xff1a; 1. 數據獲取&#xff1a;量化交易接口首先需要通過與行情數據供應商或交易所的API接…

車載以太網物理層

車載以太網物理層 O S I 參考模型的第 1 層&#xff08; 最底層&#xff09;。負責邏輯信號&#xff08; 比特流&#xff09;與物理信號&#xff08;電信號、光信號&#xff09;之間的互相轉換&#xff0c;通過傳輸介質為數據鏈路層提供物理連接。 車載以太網與傳統以太網相比…

java實現docx,pdf文件動態填充數據

一&#xff0c;引入pom 根據需求引入自己所需pom org.apache.poi poi 4.1.1 org.apache.poi poi-ooxml 4.1.1 org.jxls jxls 2.6.0 ch.qos.logback logback-core org.jxls jxls-poi 1.2.0 fr.opensagres.xdocreport fr.opensagres.xdocreport.core 2.0.2 fr.opensagres.xdocrep…

QT筆記——QProcess學習

我們常常想通過某一個類&#xff0c;來啟動一個外部進程 本文將講解如何通過QProcess來進行啟動外部進程 一&#xff1a;了解QProcess QProcess是Qt框架提供的一個類&#xff0c;用于在應用程序中執行外部進程。它提供了一系列函數來啟動、控制和與外部進程進行交互 1.啟動進程…

C++入門基礎(萬字詳解!!!)

文章目錄 前言1.C關鍵字2.命名空間3.C的輸入輸出4.缺省參數4.1 全缺省4.2 半缺省 5.函數重載6. 引用6.1 引用的特性6.2 引用的使用場景6.3 引用和指針 7.內聯函數7.1 特性 8.auto關鍵字8.1 注意事項 9. 基于范圍的for循環9.1 使用條件 10.指針控制nullptr10.1 注意事項 11.總結…

fastadmin 自定義搜索分類和時間范圍

1.分類搜索&#xff0c;分類信息獲取----php 2.對應html頁面&#xff0c;頁面底部加搜索提交代碼&#xff08;這里需要注意&#xff1a;紅框內容&#xff09; 圖上代碼----方便直接復制使用 <script id"countrySearch" type"text/html"><!--form…

安全 1自測

常見對稱加密算法&#xff1a; DES&#xff08;Data Encryption Standard&#xff09;&#xff1a;數據加密標準&#xff0c;速度較快&#xff0c;適用于加密大量數據的場合&#xff1b; 3DES&#xff08;Triple DES&#xff09;&#xff1a;是基于DES&#xff0c;對一塊數據用…

Spring相關面試題

&#x1f44f;作者簡介&#xff1a;大家好&#xff0c;我是愛寫博客的嗯哼&#xff0c;愛好Java的小菜鳥 &#x1f525;如果感覺博主的文章還不錯的話&#xff0c;請&#x1f44d;三連支持&#x1f44d;一下博主哦 &#x1f4dd;個人博客&#xff1a;敬請期待 &#x1f4d5;系列…

時序預測 | MATLAB實現EEMD-GRU、GRU集合經驗模態分解結合門控循環單元時間序列預測對比

時序預測 | MATLAB實現EEMD-GRU、GRU集合經驗模態分解結合門控循環單元時間序列預測對比 目錄 時序預測 | MATLAB實現EEMD-GRU、GRU集合經驗模態分解結合門控循環單元時間序列預測對比效果一覽基本介紹模型搭建程序設計參考資料 效果一覽 基本介紹 1.MATLAB實現EEMD-GRU、GRU時…

springcloud+nacos實現灰度發布

灰度發布 gateway網關實現灰度路由 灰度發布實體 package com.scm.boss.common.bean;import lombok.Data; import lombok.experimental.Accessors;import java.io.Serializable;/*** 灰度發布實體*/ Data Accessors(chain true) public class GrayBean implements Serializ…

【Linux】—— 進程程序替換

目錄 序言 &#xff08;一&#xff09;替換原理 1、進程角度——見見豬跑 1?? 認識 execl 函數 2、程序角度——看圖理解 &#xff08;二&#xff09;替換函數 1、命名理解 2、函數理解 1??execlp 2??execv 3??execvp 4??execle 5??execve 6??execve…

機器學習重要內容:特征工程之特征抽取

目錄 1、簡介 2、?為什么需要特征工程 3、特征抽取 3.1、簡介 3.2、特征提取主要內容 3.3、字典特征提取 3.4、"one-hot"編碼 3.5、文本特征提取 3.5.1、英文文本 3.5.2、結巴分詞 3.5.3、中文文本 3.5.4、Tf-idf ?所屬專欄&#xff1a;人工智能 文中提…

LLaMA長度外推高性價比trick:線性插值法及相關改進源碼閱讀及相關記錄

前言 最近&#xff0c;開源了可商用的llama2&#xff0c;支持長度相比llama1的1024&#xff0c;拓展到了4096長度&#xff0c;然而&#xff0c;相比GPT-4、Claude-2等支持的長度&#xff0c;llama的長度外推顯得尤為重要&#xff0c;本文記錄了三種網絡開源的RoPE改進方式及相…

Vue-打印組件頁面

場景: 需要將頁面的局部信息打印出來&#xff0c;只在前端實現&#xff0c;不要占用后端的資源。經過百度經驗&#xff0c;決定使用 print-js和html2canvas組件。 1. 下載包 npm install print-js --save npm install --save html2canvas 2. 組件內引用 <script>impo…

C語言之數組指針和指針數組

C語言之數組指針和指針數組 一、含義二、定義2.1 指針數組2.2 數組指針 三、使用3.1 指針數組在參數傳遞時的使用3.1.1 指針數組的排序3.2 數組指針在參數傳遞時的使用 一、含義 指針數組&#xff1a;顧名思義&#xff0c;其為一個數組&#xff0c;數組里面存放著多個指針&…

C#生成隨機驗證碼

以下是一個簡單的C#驗證碼示例&#xff1a; private void GenerateCaptcha() {// 生成隨機字符串string chars "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";Random random new Random();string captchaString new string(Enumerable.Repe…

TPAMI, 2023 | 用壓縮隱逆向神經網絡進行高精度稀疏雷達成像

CoIR: Compressive Implicit Radar | IEEE TPAMI, 2023 | 用壓縮隱逆向神經網絡進行高精度稀疏雷達成像 注1:本文系“無線感知論文速遞”系列之一,致力于簡潔清晰完整地介紹、解讀無線感知領域最新的頂會/頂刊論文(包括但不限于Nature/Science及其子刊;MobiCom, Sigcom, MobiSy…

Java【算法 04】HTTP的認證方式之DIGEST認證詳細流程說明及舉例

HTTP的認證方式之DIGEST 1.是什么2.認值流程2.1 客戶端發送請求2.2 服務器返回質詢信息2.2.1 質詢參數2.2.2 質詢舉例 2.3 客戶端生成響應2.4 服務器驗證響應2.5 服務器返回響應 3.算法3.1 SHA-2563.1.1 Response3.1.2 A13.1.3 A2 3.2 MD53.2.1 Request-Digest3.2.2 A13.2.3 A2…

CSS3 中新增了哪些常見的特性?

聚沙成塔每天進步一點點 ? 專欄簡介? 圓角&#xff08;Border Radius&#xff09;? 漸變&#xff08;Gradients&#xff09;? 陰影&#xff08;Box Shadow&#xff09;? 文本陰影&#xff08;Text Shadow&#xff09;? 透明度&#xff08;Opacity&#xff09;? 過渡&…