parte.-1 Prefácio
Estou um pouco ocupado recentemente, talvez o conteúdo atualizado seja relativamente simples, desculpe, uau, o conteúdo atualizado de hoje:
part.0 Prefácio
Vendo o gzh BYtools科研笔记
(recomendo a todos dar uma olhada, existem muitos gráficos interessantes reproduzidos na linguagem R!!) fiz uma imagem assim:
Parece muito interessante, mas o autor usou a linguagem R + Adobe Illustrator para completá-lo, então eu queria ver se poderia usar o MATLAB para completá-lo. A figura é do jornal:
- Li, Pu-Dong & Zhu, Zeng-Rong & Zhang, Yunzeng & Xu, Jianping & Wang, Hongkai & Wang, Zhengyi & Li, Hongye. (2022). O microbioma da filosfera muda para combater o patógeno da melanose. Microbiome. 10. 10.1186 /s40168-022-01234-x.
Figura A da Figura 6:
Para baixar um artigo, você pode abri-lo copiando o link abaixo em seu navegador:
- https://www.researchgate.net/journal/Microbiome-2049-2618/publication/359692392_The_phyllosphere_microbiome_shifts_toward_combating_melanose_pathogen/links/6248fec18068956f3c6532fa/The-phyllosphere-microbiome-shifts-toward-combating-melanose-path ogen.pdf
Obviamente, o armazém Gitee fornecido no final do meu artigo também fornece um arquivo pdf, que pode ser baixado e visualizado.
parte.1 função principal
É desenhar scatter
os pontos de dispersão duas vezes com a função, uma com arestas, e outra para deletar as arestas, e ao mesmo tempo definir um dos plots para não aparecer na legenda. É apenas uma pequena função de três ou cinco linhas de código, que podem criar um novo arquivo m (arquivo Matlab) ou apenas colocá-lo no final do código.
function stHdl = strokeScatter(varargin)
set(gca,'NextPlot','add');
scHdl = scatter(varargin{
:});
stHdl = scatter(varargin{
:},'MarkerEdgeColor','none');
scHdl.Annotation.LegendInformation.IconDisplayStyle='off';
end
parte.2 Uso e reprodução
uso básico
O uso de dados (consulte o armazém Gitee no final do artigo para os dados usados) faz loops e desenhos diretamente é muito semelhante:
% BinningDemo
Date = readtable('binningData.txt','Delimiter',',');
% Group = flipud(unique(Date.group))
Group = {
'other bins'; 'bin 19'; 'bin 13'; 'bin 11'; 'bin 3'; 'bin 5'};
CList = [177,177,176; 63,168,106; 24,222,154;
96,0,123; 189,83,110; 170,219,87]./255;
figure('Units','normalized','Position',[.2,.3,.4,.6]);
% 循环绘制散点
for i = 1:length(Group)
ind = strcmp(Date.group,Group(i));
binX = Date.X(ind);
binY = Date.Y(ind);
if i == 1
strokeScatter(binX,binY,170,'filled','CData',CList(i,:),...
'MarkerEdgeColor','none');
else
strokeScatter(binX,binY,170,'filled','CData',CList(i,:),...
'MarkerEdgeColor','k','LineWidth',2);
end
end
Modificação da área de coordenadas
% 坐标区域修饰
ax = gca;
ax.PlotBoxAspectRatio = [1,1,1];
ax.Box = 'on';
ax.LineWidth = 2;
ax.FontName = 'Times New Roman';
ax.XGrid = 'on';
ax.YGrid = 'on';
ax.TickDir = 'out';
ax.XLim = [0.2,0.85];
ax.YTick = 0:50:150;
ax.XTick = 0.4:0.2:0.8;
ax.FontSize = 14;
ax.XColor = [.2,.2,.2];
ax.YColor = [.2,.2,.2];
% X轴副标签
ax.XRuler.SecondaryLabel.String = 'GC content';
ax.XRuler.SecondaryLabel.Position(1) = ax.XLim(1);
ax.XRuler.SecondaryLabel.HorizontalAlignment = 'left';
ax.XRuler.SecondaryLabel.FontSize = 16;
ax.XRuler.SecondaryLabel.VerticalAlignment = 'bottom';
ax.XRuler.SecondaryLabel.FontWeight = 'bold';
% Y轴标签
ax.YLabel.String = 'Contig abundance';
ax.YLabel.FontSize = 24;
ax.YLabel.FontWeight = 'bold';
adicionar legenda
% 绘制图例
lgdHdl = legend(Group);
lgdHdl.NumColumns = length(Group);
lgdHdl.Location = 'southoutside';
lgdHdl.Box = 'off';
lgdHdl.FontSize = 14;
part.3 Outros exemplos
Acabei de escrever um código aqui, com preguiça de pensar em como gerar um monte de dados, então simplesmente deixei as coordenadas X serem arredondadas ao mesmo tempo, para que os pontos fossem reunidos:
clc; clear; close all
rng(6)
% 生成随机点(Generate random points)
mu = [1 1; 12 10; 9 12];
S = cat(3,[1 0; 0 2],[1 0; 0 2],[1 0; 0 1]);
r1 = abs(mvnrnd(mu(1,:),S(:,:,1),200));
r2 = abs(mvnrnd(mu(2,:),S(:,:,2),200));
r3 = abs(mvnrnd(mu(3,:),S(:,:,3),200));
% 绘制散点图(Draw scatter chart)
hold on
propCell = {
'LineWidth',2,'MarkerEdgeColor',[.3,.3,.3],'SizeData',100};
strokeScatter(round(r1(:,1)),r1(:,2),'filled','CData',[0.40 0.76 0.60],propCell{
:});
strokeScatter(round(r2(:,1)),r2(:,2),'filled','CData',[0.99 0.55 0.38],propCell{
:});
strokeScatter(round(r3(:,1)),r3(:,2),'filled','CData',[0.55 0.63 0.80],propCell{
:});
% 增添图例(Draw legend)
lgd = legend('class1','class2','class3');
lgd.Location = 'northwest';
lgd.FontSize = 14;
% 坐标区域基础修饰(Axes basic decoration)
ax=gca; grid on
ax.FontName = 'Cambria';
ax.Color = [0.9,0.9,0.9];
ax.Box = 'off';
ax.TickDir = 'out';
ax.GridColor = [1 1 1];
ax.GridAlpha = 1;
ax.LineWidth = 1;
ax.XColor = [0.2,0.2,0.2];
ax.YColor = [0.2,0.2,0.2];
ax.TickLength = [0.015 0.025];
% 隐藏轴线(Hide XY-Ruler)
pause(1e-6)
ax.XRuler.Axle.LineStyle = 'none';
ax.YRuler.Axle.LineStyle = 'none';
function stHdl = strokeScatter(varargin)
set(gca,'NextPlot','add');
scHdl = scatter(varargin{
:});
stHdl = scatter(varargin{
:},'MarkerEdgeColor','none');
scHdl.Annotation.LegendInformation.IconDisplayStyle='off';
end
sobre
Recomende gzh novamente BYtools科研笔记
, embora a conta pareça não ter sido criada há muito tempo, mas há muito conteúdo de alta qualidade!
Todos os códigos e documentos originais deste artigo estão disponíveis nos seguintes armazéns da Gitee:
https://gitee.com/slandarer/spdraw