Cytoscape 和选择器

Cytoscape and selectors

我不熟悉 cytoscape 或 Java,所以我不知道是否有一种方法可以根据节点的度来定义节点大小。
目前我正在使用以下内容:

cytoscapeobj.set_style(
    [
        {
             'selector':node,
             'style': {
                 'font-family': 'helvetica',
                 'font-size': '20px',
                 'label': 'data(id)'
             }
        },
        {
             'selector': 'edge',
             'style': {
                 'font-family': 'helvetica',
                 'font-size': '20px',
                  'width' : 'mapData(weight)' # it is actually not working

             }
        },
        {
             'selector': 'node[Degree>0]',
             'style': {
                 'width': '100px',
                 'height': '100px'
             }
        },
    {
         'selector': 'node[Degree>1]',
         'style': {
             'width': '150px',
             'height': '150px'
         }
    },
    {
         'selector': 'node[Degree>2]',
         'style': {
             'width': '200px',
             'height': '200px'
         }
    }
]

)

我有数千个节点,其中一些节点的度数为 1(大部分),然后我的节点度数为 2, 3, 4, 5 ,... 100, ... 为它们每个添加一个选择器并不容易。 你知道是否有更简单的方法来绘制任何节点的度数?

您可以在节点的 data and then use style mappers 中定义任何必需的参数,以将该数据应用于 width 或任何其他样式属性。所以你的代码实际上是正确的方法。

它不起作用,因为 mapData()data() 以不同的方式工作。虽然 data() 只会将 data 值应用于 属性,就像它在您的示例中对 label 所做的那样,但 mapData() 需要设置其他参数。

看看这个:

width: mapData(weight, 0, 100, 1, 3)

在这种情况下,mapData 将采用 data.weight 的值,然后检查该值在 0 到 100 之间的位置,并按比例将 width 设置为 1 到 1 之间的相应值3.

根据我的经验,我发现使用在代码中预先计算的值更方便。所以我会创建 data.width 参数并设置为所需的宽度,然后将简单的 data() 映射器映射到该值。