我有一个名为Node
的类class Node:
def __init__(self,name, childList, parentList):
self.name = name
# a list of all nodes which are children of this node
# may have length 0 to many
self.childList = childList
# a list of all nodes which are parents of this node
# may have length 0 to many
self.parentList = parentList
我有一个节点列表(nodeList)。这些节点可以在彼此的父列表或子列表中。我希望能够将他们的childLists和父代列表中指定的节点之间的关系可视化到stdout上(作为ASCII绘图)。
例如,下面的名称是nodeList中节点的名称。
Classifier
|
|
FeatureCombiner
/ \
/ \
/ \
FeatureGenerator1 FeatureGenerator2
\ /
\ /
\ /
\ /
\ /
\ /
\ /
Image Loader
分类器有一个空的parentList和一个长度为1的childList,包含FeatureCombiner。 FeatureGenerator1和2分别具有相同的parent和childList,包含FeatureCombiner和Image Loader。 Image Loader有一个空的childList和一个包含FeatureGenerator1和2的parentList。
提前谢谢你, 马特
答案 0 :(得分:7)
这在ascii中是非常重要的,因为缺乏完整的答案证明:
也就是说,有许多工具可用于以非ascii方式绘制图形。查看与初学者相关的NetworkX和Matplotlib绘图功能:
http://matplotlib.sourceforge.net/
还有pydot:
答案 1 :(得分:5)
也许从Perl的Graph::Easy
?
答案 2 :(得分:1)
我们在DVC project中遇到了类似的问题,潜伏甚至尝试将Graph::Easy移植到Python中之后,我们意识到没有跨平台的python库可以做到这一点,而没有需要像Graphviz这样的沉重依赖项。因此,我们最终使用了一个名为Grandalf的令人惊叹的库来为我们处理布局,然后我们将结果自己以ASCII呈现并使用分页器呈现(这就是git log
这样的东西它的输出在水平和垂直方向都不错,并且可以滚动)。 See the whole code here。
+-------------------+ +--------------------+
| test_data.csv.dvc | | train_data.csv.dvc |
+-------------------+ +--------------------+
** **
*** ***
** **
+-------------------+
| featurization.dvc |
+-------------------+
*** ***
** ***
** **
+--------------+ **
| training.dvc | **
+--------------+ ***
*** ***
** **
** **
+---------+
| Dvcfile |
+---------+