在matlab中绘制元素间的链接
我想通过点的方式将我在程序中创建的消声器可视化到一个图表上。这些点应该代表消声器的一部分。例如: 类型=在matlab中绘制元素间的链接,matlab,hyperlink,plot,Matlab,Hyperlink,Plot,我想通过点的方式将我在程序中创建的消声器可视化到一个图表上。这些点应该代表消声器的一部分。例如: 类型= 'straight' 'helmholtz' 'expansion' 'straight' 'contraction' 'straight' 'helmholtz' 这是一个消声器,所有类型的元素沿一个轴。问题是,亥姆霍兹元素应该位于前一个元素之上。在相同的X值上,但Y+1。它应该看起来像gplot,但不是以每个人都保持代表的循环方式。如果我写下来,应该是这样的 亥姆霍兹亥姆霍兹 我 直-
'straight'
'helmholtz'
'expansion'
'straight'
'contraction'
'straight'
'helmholtz'
这是一个消声器,所有类型的元素沿一个轴。问题是,亥姆霍兹元素应该位于前一个元素之上。在相同的X值上,但Y+1。它应该看起来像gplot,但不是以每个人都保持代表的循环方式。如果我写下来,应该是这样的
亥姆霍兹亥姆霍兹
我
直----膨胀----直----收缩----直
圆圈代表文本,线条连接如图所示。
这是我尝试过的最好的东西,但离我想要的还差得远
types={'straight';'helmholtz';'expansion';'straight';'contraction';'straight';'helmholtz'}
index = size(find(strcmp(types,'helmholtz')))
coords = [];
for it=1:size(types,1)-size(find(strcmp(types,'helmholtz')),1)
if strcmp(types, 'Straight')
coords= [it, 1]
end
if strcmp(types, 'contraction')
coords= [it, 1]
end
if strcmp(types, 'expansion')
coords= [it, 1]
end
if strcmp(types, 'helmholtz')
coords= [it-1,2]
end
end
axes(handles.NodePlot);
plot(coords(:), '-o');
text(coords(:,1) - 0.1, coords(:,2) + 0.1, num2str((1:amountofNodes)), 'FontSize', 14)
你们谁能把我推到正确的方向
干杯你的主要问题在循环中。一方面,在每次迭代中替换数组“coords”,而不是填充它;另一方面,范围似乎是错误的(为什么在结束之前停止循环?) 我向您推荐以下简单代码:
coords = zeros(length(types)+sum(strcmp(types,'helmholtz')),2);
j = 0; k = 1;
for i=1:length(types)
if strcmp(types{i},'helmholtz')
coords(k,:) = [j-1,2]; y(k+1,:) = [j-1,1]; k = k+2;
else
coords(k,:) = [j,1]; k = k+1;
j = j+1;
end
end
plot(coords(:,1),coords(:,2),'o-')
//adding labels
j=1;
for i=1:length(coords);
if i==1 || y(i,2)>=y(i-1,2)
text(y(i,1), y(i,2) + 0.05, [types{j}], 'FontSize', 12);
j = j+1;
end
end
变量j
存储消声器中的位置,k
数组中的索引coords
,以及i
数组中的索引。为了提高速度,我预先分配了数组coords
。然后,对于每个元素,如果它与“helmholtz”匹配,我会创建两个点,一个是点本身,另一个是前一个点的副本,用于绘制美观的图形。当您有这样一个配置时,您将看到从消声器的第1行到第2行的一段,如\u124;\ u124;
,而不是三角形,如\u124; \
。
标签应符合本规则;我承认我没有做太多的努力来矢量化循环:)
我完全忘了发布我的解决方案:)对不起!这就是它最终的结果。它已经扩展到其他方面,但正如我所说:你为我指明了正确的方向
干杯太棒了!非常感谢你。当我得到这张图的时候,我需要改变一些,但是你实际上把解决方案放在了一个银盘上!非常感谢:)剩下的是我的工作![URL=我将尽快发布我的解决方案
function plotter(handles)
coords = zeros(length(handles.types)+sum(strcmp(handles.types,'helmholtz')),2);
j = 0; k = 1;
y=[]; h=0;
for i=1:length(handles.types)
if strcmp(handles.types{i},'helmholtz')
coords(k,:) = [j-1,2];
coords(k+1,:) = [coords(k-1,1),coords(k-1,2)];
y(k-h,:) = [j-1,1];
k = k+2;
h=h+1;
else
coords(k,:) = [j,1];
y(k-h,:)=[i-1-h,0];
k = k+1;
j = j+1;
end
end
plot(coords(:,1),coords(:,2),'-o')
%//adding labels
for i=1:length(handles.types);
text(y(i,1), y(i,2) + 1.05, [handles.types{i}], 'FontSize', 12);