tikz中如何改变 graph 环境下输出 node 的间距(不等距输出)

发布于 2022-08-04 23:34:56

我在 tikz 中用 graph 库输出了如下 node:

\begin{tikzpicture}[x=2cm]

\graph{
{a,b,c}--{a1,b1,c1}--{a2,b2,c2}
};

\end{tikzpicture}

结果:182a313cd185e6ea2024a7e8d723b35f.png

这样可以输出等间距(水平和垂直)排布的 node,请问如何在 graph 下自定义 node 的水平和垂直间距,得到不等距的node?

或者还有什么方法(库),可以简化输出矩阵排布的 node,同时输出 node之间的连线(draw或者 edge)而且 node 之间的间距可以自定义?谢谢。

查看更多

关注者
0
被浏览
136
1 个回答
越来越少
越来越少 6 days ago

你没有用具体例子来详细表达问题,我也不好猜测你具体需要什么。还是建议你先去读一下手册。

我对 graph 库的理解是这样的。

用户可以用一些变量(参数,其实就是 pgf 的 key),来定义一种计算 node 位置的方法,这些变量例如

\tikzgraphsset{
  placement/.cd,
  element count/.initial=0,
  chain count/.initial=0,
  depth/.initial=0,
  width/.initial=0,
  level/.initial=0,
  logical node depth/.code=\def\pgfmathresult{1},
  logical node width/.code=\def\pgfmathresult{1},
}%

Graph 库的作者利用这些变量定义了几种计算方式,默认的是 /tikz/graphs/Cartesian placement 这个计算方式。对于这个计算方式来说,用户可以通过调整某些 key 的值(如 /tikz/graphs/chain shift)来影响这个计算方式的计算结果,但计算方式的框架是不容易修改的。

详细情况请参考手册。

也可以使用 graphdrawing 库引入其他的计算方式,这个库借助 lua 来计算,我不懂 lua。熟悉 lua 的用户可以自己编写一种计算方式。

总之 graph 库以及 graphdrawing 库强调的是“自动计算,自动排布”,非常依赖算法,而不是强调人工干预。如果总是期望用户来控制各个 node 的位置,那就背离了这个思想。所以这个思想主要针对有很多 node 的情况。当然用户也可以根据情况来调整个别 node 的位置,但这不是重点。

在 node 比较多的情况下,并没有绝对的标准来判断一种排布方式是否足够美观,减少用户的干预也未必不是一个好的选择。当然这对算法的设计也就有相当的要求,不是那么轻易就能设计好。例如命令 \usegdlibrary{force} 引入的算法就参考了数篇论文。你可以搜索相关的资料,例如 胡一凡 的作品

如果你想知道如何用参数调整算法的计算结果,应该先去阅读手册,或者手册中给出的参考论文。如果你觉得英文手册不好读,倒是也有关于 graph 库的中文介绍,也不太好读。不过,只要静心读,总能读明白。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览