[英]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.