在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);