0

我不熟悉 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, ... 为每个节点添加一个选择器并不容易。你知道是否有更简单的方法来绘制任何节点的度数?

4

1 回答 1

3

您可以在节点的数据中定义任何必需的参数,然后使用样式映射器将该数据应用于样式属性width或任何其他属性。所以你的代码实际上是正确的方法。

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

看一下这个:

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

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

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

于 2021-08-28T12:46:05.433 回答