假設我有五個不相交的組(即它們重疊)。我想爲每個類別製作Var1與Var2的散點圖。R ggplot方面與非不相交類
更具體地說,考慮一個數據幀,它有兩列Var1和Var2,與五列連接,取值爲0和1,表示每行對五個類別中的每一個的隸屬度。如果這些類是不相交的,我會簡單地對取值爲1到5的變量使用方面網格,並解決問題。但是因爲它們是重疊的,所以我不確定如何製作這樣的情節。
謝謝你的幫助!
假設我有五個不相交的組(即它們重疊)。我想爲每個類別製作Var1與Var2的散點圖。R ggplot方面與非不相交類
更具體地說,考慮一個數據幀,它有兩列Var1和Var2,與五列連接,取值爲0和1,表示每行對五個類別中的每一個的隸屬度。如果這些類是不相交的,我會簡單地對取值爲1到5的變量使用方面網格,並解決問題。但是因爲它們是重疊的,所以我不確定如何製作這樣的情節。
謝謝你的幫助!
使用tidyr
程序包很容易,特別是該程序包中的gather()
函數。
首先我創建一個數據框,我認爲它有你想要的屬性。請注意,我使用dplyr,它很棒pipe syntax(這就是下面的%>%
)。
# packages we need
require(tidyr)
require(dplyr)
require(ggplot2)
# an example data frame
df <-
data.frame(var1 = rnorm(30),
var2 = rnorm(30),
A = sample(c(TRUE, FALSE), 30, replace = T),
B = sample(c(TRUE, FALSE), 30, replace = T),
C = sample(c(TRUE, FALSE), 30, replace = T),
D = sample(c(TRUE, FALSE), 30, replace = T),
E = sample(c(TRUE, FALSE), 30, replace = T)
)
的關鍵步驟是使用rehape tidyr::gather()
使得每個數據點(var1, var2)
被複制五倍的數據幀,即一次即gather
編每一列。除了複製列中的數據而不是gather
ed之外,gather()
函數還會創建兩個新列。其中的第一個我稱爲class
,並且將具有A,B,C,D或E的值。第二個我稱爲is_in
,其值爲TRUE或FALSE,取決於相應的數據點是否在類中由class
欄所指。
# reshape the data frame using dplyr
df.reshaped <-
df %>%
mutate(index = row_number()) %>% # number the data points
gather(class, is_in, A:E) %>% # repeat all (var1, var2) points 5x
filter(is_in == TRUE) %>% # keep only points you want
select(-is_in) # the is_in column is now superfluous
數據現在已準備好繪圖。爲了驗證我們的圖將在多個方面顯示相同的原始數據點,我在上面輸入mutate()
呼叫以便按行號爲所有的原始(即收集之前)的數據點編號。我將使用geom_text()
進行繪圖,因此如果我們在不同方面看到相同的數字,則會達到目的。
# plot the graph
df.reshaped %>%
ggplot(aes(x = var1, y = var2, label = index)) +
geom_text() +
facet_grid(.~class) +
theme_bw()
ggsave('SO_39820087.png', width = 10, height = 4)
由此產生的情節在我的機器上看起來像這樣。
爲什麼不包括[再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)與樣本的輸入數據,以更清楚地知道你到底有什麼和你想要什麼。這不是一般的策劃建議的地方。確保你問一個特定的編程問題。 – MrFlick