我也一直在努力,直到我找出了geom_net包的正確data.frame結構。基本上你需要的是一個data.frame,它有兩部分:在第一部分中,通過提供一個FROM和一個TO列來描述邊緣(繪製的線條)。可選的,額外的信息可以在例如單獨的列來提供,線寬
ans <- read.table(text ="
from to linewidth
Tom Jim 0.1
Gary Shirly 1
Shirly Jack 0.5
Tom Jack 2
", sep = " ", stringsAsFactors = FALSE, header=TRUE)
p <- ggplot(data = ans, aes(from_id = from, to_id = to))
p + geom_net(label = TRUE, vjust=-1)
但是你會發現,一些節點(頂點)都沒有標註。所以這是data.frame的第2部分很重要的地方。在第2部分中,提供了要標記的節點的名稱。這是因爲geom_net只標記FROM節點而不標記TO節點,因此您至少需要提供未用作FROM點的節點名稱。
ans <- read.table(text ="
from to linewidth
Tom Jim 0.1
Gary Shirly 1
Shirly Jack 0.5
Tom Jack 2
Helen Jack 3
Jim NA NA
Jack NA NA
", sep = " ", stringsAsFactors = FALSE, header=TRUE, na.strings = "NA")
p <- ggplot(data = ans, aes(from_id = from, to_id = to, linewidth = linewidth))
p + geom_net(label = TRUE, vjust=-1)
若干事情在進行以上:1)I加入 「吉姆NA NA傑克NA NA」 爲標籤的未標記的節點,2)還添加na.strings = 「NA」,以確保函數read.table( )正確地解釋NA值,並且3)我將線寬參數添加到aes,以便它從data.frame映射到plot。另外,一旦爲所有節點提供了名稱,警告消息「有XX個節點沒有節點信息」就會消失。
希望有幫助 編輯:按要求我添加了結果輸出。由於geom_net()每次運行時改變佈局,我已經包含了兩個示例圖像
只是爲了完成整個data.frame建設過程中,我已經包含下面,你有兩個獨立的數據的情況。幀,你需要將它們合併在一起:第一個data.frame用於行(邊),第二個是節點(頂點)。
lines <- read.table(text ="
from to linewidth
Tom Ivy 0.1
Gary Ivy 1
Shirly Ivy 0.5
Tom Helen 2
Helen Ivy 3
", sep = " ", stringsAsFactors = FALSE, header=TRUE, na.strings = "NA")
nodes <- read.table(text ="
name
Tom
Jim
Gary
Shirly
Jack
Helen
Susan
Joel
Ivy
", sep = " ", stringsAsFactors = FALSE, header=TRUE,na.strings = "NA")
df <- merge(lines, nodes, by.x = "from", by.y = "name", all = TRUE)
p <- ggplot(data = df, aes(from_id = from, to_id = to, linewidth = linewidth))
p + geom_net(label = TRUE, vjust=-1)
嗨。你有沒有得到這個解決?如果是這樣,怎麼樣? – hackR
@hackR不,我最後使用了igraph。 – user5779223