簡體   English   中英

特定geom_node_text的繪圖標簽

[英]Plot labels for specific geom_node_text

我正在嘗試繪制網絡圖並僅顯示具有高於特定閾值的中心得分的geom_node_text標簽。 我的代碼如下:

rt_tbl %>% 
mutate(centrality = centrality_authority()) %>% 
ggraph(layout = 'kk') + 
geom_edge_link(aes(), colour = "gray", alpha = 0.5) + 
geom_node_point(aes(size = centrality, colour = centrality)) + 
geom_node_text(data=subset(centrality > 0.6), aes(centrality, label=name)) + 
theme_graph(base_family = "Roboto Condensed", base_size = 13)

我遇到以下錯誤:

Error in subset(centrality > 100) : object 'centrality' not found

我的數據如下所示:

# A tbl_graph: 1589 nodes and 3992 edges
# A directed multigraph with 3 components
# Node Data: 1,589 x 3 (active)
        name degree centrality
        <chr>  <dbl>      <dbl>
1   Ashinlay1970     35 0.90053429
2     WinTunMin1     25 0.66408597
3 Yaminayeyaohn1      2 0.06080755
4  TUNOO00655880      3 0.07609831
5     inewagency      8 0.21569006
6         KSwe03      4 0.12416238
# ... with 1,583 more rows

# Edge Data: 3,992 x 2
from    to
<int> <int>
1     1    48
2     1    49
3     1     1
# ... with 3,989 more rows

我以前從未使用過ggraph ,您應該提供一個可重現的最小示例,但是請嘗試以下操作:

rt_tbl %>% 
    mutate(centrality = centrality_authority()) %>% 
    ggraph(layout = 'kk') + 
    geom_edge_link(aes(), colour = "gray", alpha = 0.5) + 
    geom_node_point(aes(size = centrality, colour = centrality)) + 
    geom_node_text(aes(label=ifelse(centrality > .6, name, NA))) + 
    theme_graph(base_family = "Roboto Condensed", base_size = 13)

您的subset -approach不起作用,因為它不看你的內部rt_tbl而是試圖獲取對象centrality ,它不存在。 但是無論如何它都行不通,因為您需要給它一個與數據長度相同的向量,但是子集只返回與您的條件匹配的值。 因此,使用ifelse更適合您的任務。

編輯:

順便說一句, 是一個最小的可復制示例(至少我現在知道如何使用ggraph ):

library(tidygraph)
library(ggraph)

rt_tble <- tidygraph::create_star(10) %>% 
    mutate(centrality = centrality_authority(), 
           name = LETTERS[1:10])

ggraph(graph = rt_tble) +
    geom_edge_link() +
    geom_node_point(aes(size = centrality, colour = centrality)) + 
    geom_node_text(aes(label = ifelse(centrality > .6, as.character(name), NA_character_)))

我不得不使用as.character(name)而不是namelevels(name) (就像我之前所做的那樣),也許您也必須在上面的解決方案中更改它...

但是關於這一點,請看下面的@Alper Yilmaz解決方案。

這不是答案,而是對任何使用以上答案的未來訪客的評論。 當我在不同的網絡中嘗試levels(name) ,它給出了錯誤的結果。 tidygraph具有filter屬性,可用於各種幾何體中以過濾節點,邊等。

因此,以上答案的geom_node_text行應寫為:

geom_node_text(aes(filter=centrality > .6, label = name))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM