如何創建一個山脊線圖,其中多個密度可以覆寫在同一縱坐標上并通過顏色區分?
我真正的資料集是實際的 PDF。對于一個最小的可重現示例,我生成分布并提取 PDF 以在虛擬函式中使用。資料框有一個模型名稱(用于分組)、與 PDF 縱坐標配對的 x 值,以及一個分隔不同山脊線級別(即山脊線 y 軸)的 id 欄位。
制作示例資料框
makedfs <- function(name, id, mu, sig) {
vals <- exp(rnorm(1000, mean=mu, sd=sig))
pdf <-density(vals)
model <- rep(name, length(pdf$x))
prox <- rep(id, length(pdf$x))
df <- data.frame(model, prox, pdf$x, pdf$y)
colnames(df) <- c("name", "id", "x", "pdf")
return(df)
}
df1 <- makedfs("model1", 0, log(1), 1)
df2 <- makedfs("model2", 0, log(0.5), 2)
df3 <- makedfs("model1", 1, log(0.2), 0.8)
df4 <- makedfs("model2", 1, log(1), 1)
df <- rbind(df1, df2, df3, df4)
head(df,5)
name id x pdf
1 model1 0 -0.6541933 0.0003544569
2 model1 0 -0.5999428 0.0007800386
3 model1 0 -0.5456924 0.0016274229
4 model1 0 -0.4914420 0.0032231582
5 model1 0 -0.4371915 0.0060682580
前兩個模型的快速繪圖如下所示:
plot(df1$x, df1$pdf, type ="l", col=1, xlim=c(-6,6), xlab = "x", ylab = "pdf")
lines(df2$x, df2$pdf, col=2)
legend("topleft", c("df1", "df2"), col = 1:2, lty = 1)

山脊線不作業
我希望在這個山脊線圖上看到 y=0 處的上述曲線,但是所有 PDF 曲線的線條和填充都有問題。
library(ggplot2)
p <- ggplot(df, aes(x=x, y=id, height = pdf, group = name, fill = name))
geom_ridgeline(alpha = 0.5, scale = 1)
scale_y_continuous(limits = c(0, 5))
scale_x_continuous(limits = c(-6, 6))

如何生成預期的山脊線圖?
uj5u.com熱心網友回復:
恕我直言,問題是您搞砸了分組。而不是分組,name你必須同時分組name并id使用例如interaction:
set.seed(123)
library(ggplot2)
library(ggridges)
ggplot(df, aes(x=x, y=id, height = pdf, group = interaction(name, id), fill = name))
geom_ridgeline(alpha = 0.5, scale = .5)
scale_y_continuous(limits = c(0, 5))
scale_x_continuous(limits = c(-6, 6))

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/523482.html
標籤:rggplot2山脊线图
上一篇:在沖積地塊中間添加自定義標簽
