我想要绘制的结构应该与显示的结构完全相同。谢谢!
答案 0 :(得分:4)
这是一个我掀起的一个小函数,它将输入一个正方形的上三角矩阵并绘制上面的晶格结构:
function hFigure = plot_lattice(A)
%# Compute all the coordinates needed for the lines and points:
N = size(A,1);
[xPoints,yPoints] = meshgrid(0:N-1);
yPoints = bsxfun(@plus,-yPoints,0:0.5:(N-0.5)/2);
xLines = [xPoints([1:N+1:N^2-N-1 1:N:N^2-2*N+1]); ...
xPoints([1:N-1 N:-1:2],N).']; %'
yLines = [yPoints([1:N+1:N^2-N-1 1:N:N^2-2*N+1]); ...
yPoints([1:N-1 N:-1:2],N).']; %'
index = find(triu(reshape(1:N^2,N,N)));
xPoints = xPoints(index);
yPoints = yPoints(index);
values = strtrim(cellstr(num2str(A(index))));
%# Create the figure:
hFigure = figure('Color','w');
hAxes = axes('Parent',hFigure,'XLim',[-0.5 N-0.5],...
'YLim',[min(yPoints)-0.5 max(yPoints)+0.5],...
'YColor','w','XTick',0:N-1,'LineWidth',2);
hold on;
plot(hAxes,xLines,yLines,'k','LineWidth',2);
plot(hAxes,xPoints,yPoints,'o','MarkerFaceColor',[0.96 0.96 0.86],...
'MarkerSize',30,'MarkerEdgeColor','k','LineWidth',2);
text(xPoints,yPoints,values,'Parent',hAxes,...
'HorizontalAlignment','center');
hold off;
end
这是一个带有样本矩阵的测试:
>> A = triu(reshape(1:25,5,5))
A =
1 6 11 16 21
0 7 12 17 22
0 0 13 18 23
0 0 0 19 24
0 0 0 0 25
>> plot_lattice(A);
答案 1 :(得分:2)
我稍微修改了代码,因此它可以打印节点以及每个节点中的多个值。
A现在是一个三维矩阵,并且也无法获取未在树中打印的空值(NaN)
Ofc代码不是最优的......也许你们中的一个可以改进它
%# Compute all the coordinates needed for the lines and points:
close all
[N,L] = size(A);
L=L/N;
[xPoints,yPoints] = meshgrid(0:N-1);
yPoints = bsxfun(@plus,-yPoints,0:0.5:(N-0.5)/2);
xLines = [xPoints([1:N+1:N^2-N-1 1:N:N^2-2*N+1]); xPoints([1:N-1 N:-1:2],N).'];
yLines = [yPoints([1:N+1:N^2-N-1 1:N:N^2-2*N+1]); yPoints([1:N-1 N:-1:2],N).'];
index = find(triu(reshape(1:N^2,N,N)));
xPoints = xPoints(index);
yPoints = yPoints(index);
% values = strtrim(cellstr(num2str(A(index))));
for i=1:L
values(:,i) = strtrim(cellstr(num2str(A((i-1)*N*N+index))));
end
values = strrep(values, 'NaN', ' ');
for i=1:N
for j=i:N
if i==1 && j==1
nodes(i,j)=cellstr(strcat('N_','0'));
else
nodes(i,j)=cellstr(strcat('N_','{',repmat('u',1,(j-1)-(i-1)),repmat('d',1,(i-1)),'}'));
end
end
end
nodes = nodes(index);
%# Create the figure:
hFigure = figure('Color','w');
hAxes = axes('Parent',hFigure,'XLim',[-0.5 N-0.5],'YLim',[min(yPoints)-0.5 max(yPoints)+0.5],'YColor','w','XTick',0:N-1,'LineWidth',2);
hold on;
plot(hAxes,xLines,yLines,'k','LineWidth',2);
plot(hAxes,xPoints,yPoints,'o','MarkerFaceColor',[0.96 0.96 0.86],'MarkerSize',60,'MarkerEdgeColor','k','LineWidth',2);
for i=1:L
text(xPoints,yPoints+L*0.05-(i-1)*0.1,values(:,i),'Parent',hAxes,'HorizontalAlignment','center');
end
text(xPoints-0.4,yPoints,nodes,'Parent',hAxes,'HorizontalAlignment','center');
hold off;
答案 2 :(得分:1)
我会使用matlab生成一个文本文件,以便在Graphviz中使用。