如何使用Python创建变体树?

时间:2017-04-05 12:01:23

标签: python graph tree permutation

我想评估给定数量的特征和相应属性存在多少变体,然后将这些组合绘制为分支树,其中每个分支代表一个组合/变体。

实施例: 功能:颜色,大小,暗淡。每个功能都有不同的属性(颜色:红色,绿色,蓝色;尺寸:大,小)。

通过排列,我找到了变种的数量。每个组合/变体都是我的变体树的一个分支。例如。 ('red','big',1)是一个分支,('red','big',2)是另一个分支,依此类推。

是否有任何可以帮助我用节点和弧线绘制这些分支的库?

排列代码:

colors = ['red', 'green', 'blue']
size = ['big','small']
dim = [1,2,3]

from itertools import product

x =list (product(colors,size,dim))

print (x)
print ("Number of variants:",len(x))

[('red', 'big', 1), ('red', 'big', 2), ('red', 'big', 3), 
 ('red', 'small', 1), ('red', 'small', 2), ('red', 'small', 3), 
 ('green', 'big', 1), ('green', 'big', 2), ('green', 'big', 3), 
 ('green', 'small', 1), ('green', 'small', 2), ('green', 'small', 3), 
 ('blue', 'big', 1), ('blue', 'big', 2), ('blue', 'big', 3), 
 ('blue', 'small', 1), ('blue', 'small', 2), ('blue', 'small', 3)]

enter image description here

1 个答案:

答案 0 :(得分:0)

我可以使用常规图形描述格式this创建DOT。 Python文件main.py创建DOT文件:

from itertools import product

colors = ['red', 'green', 'blue']
size = ['big','small']
dim = [1,2,3]

print('digraph G {\n    rankdir=LR\n    node [shape=box]\n')
print('    start [label=""]')

for i, c in enumerate(colors):
    print(f'    color_{i} [label="{c}"]; start -> color_{i}')

    for j, s in enumerate(size):
        print(f'    size_{i}_{j} [label="{s}"]; color_{i} -> size_{i}_{j}')

        for k, d in enumerate(dim):
            print(f'    dim_{i}_{j}_{k} [label="{d}"]; size_{i}_{j} -> dim_{i}_{j}_{k}')
print('}')

我使用以下命令创建了图像:

$ python main.py > graph.dot
$ dot -Tpng graph.dot -o graph.png

我使用的dot命令来自graphviz包。我还没有使用DOT,所以我无法添加文字和蓝色。