簡體   English   中英

R小提琴圖疊加2個數據框

[英]R violin plot overlay 2 dataframes

假設您有兩個數據框

M1 <- data.frame(sample(1:3, 500, replace = TRUE), ncol = 5)
M2 <- data.frame(sample(1:3, 500, replace = TRUE), ncol = 5)

我想將它們疊加為小提琴圖,如下所示: 疊加小提琴圖ggplot2

但我有2個像上面的數據框(但更大),而不是像上面的示例那樣有3列的數據框

我嘗試過使用熔煉的建議,如下所示: 數據框的小提琴圖

但我無法覆蓋兩個數據幀

非常感謝您的幫助:

像這樣?

library(ggplot2)
library(reshape2)
set.seed(1)
M1 <- data.frame(matrix(sample(1:5, 500, replace = TRUE), ncol = 5))
M2 <- data.frame(matrix(sample(2:4, 500, replace = TRUE), ncol = 5))
M1.melt <- melt(M1)
M2.melt <- melt(M2)
ggplot() +
  geom_violin(data=M1.melt, aes(x=variable,y=value),fill="lightblue",colour="blue")+
  geom_violin(data=M2.melt, aes(x=variable,y=value),fill="lightgreen",colour="green")

有幾個問題。 首先, data.frame(...)並沒有采取ncol參數,因此你的代碼只產生一對2列的數據幀與被稱為第二列ncol如果你想5列的所有值= 5(你??),則必須使用上述的matrix(...)

其次,您確實需要使用melt(...)將數據幀從“寬”格式(5個不同的列中的類別melt(...)重組為“長”格式(1列中的所有數據稱為value ,類別以秒為單位進行區分)列,稱為variable )。

執行此操作的另一種方法是首先合並兩個數據幀:

M3 <- rbind(M1,M2)
M3$group <- rep(c("A","B"),each=100)
M3.melt <- melt(M3, id="group")
ggplot(M3.melt, aes(x=variable, y=value, fill=group)) + 
  geom_violin(position="identity")

請注意,這會生成略有不同的圖,因為ggplot縮放小提琴的寬度,而在較早的圖中,它們是分別縮放的。

編輯 (回應OP的評論)

要將填充顏色添加到圖例中,您必須將它們設置為美學標尺的一部分:將fill=...放在對aes(...)的調用內,如下所示。

ggplot() +
  geom_violin(data=M1.melt, aes(x=variable,y=value,fill="M1"),colour="blue")+
  geom_violin(data=M2.melt, aes(x=variable,y=value,fill="M2"),colour="green")+
  scale_fill_manual(name="Data Set",values=c(M1="lightblue",M2="lightgreen"))

暫無
暫無

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

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