R:在同一张图上绘制多个密度

sta*_*oob -1 r ggplot2

我正在使用 R 编程语言。

最近,我看到这篇文章How can i make a stacked multiple Density Plot with ggplot? 其中显示了一个非常有趣的图表:

在此输入图像描述

我正在尝试学习如何复制该图。

我首先模拟了该图的数据:

text = c(
"Morena, pvem, pt 307[282-326] Actual 413",
"Morena, PT 263[244-280] Actual 303",
"Morena, pvem 265[243-282] Actual 267",
"PAN, PRI, PRD, MC 193 [167-211] Actual 163",
"PAN,PRI, PRD 180[155-199] Actual 137",
"PAN, PRI 152[131-167]  Actual 126",
"PAN, PRD 112[95-125] Actual 89",
"PRI, PRF 97[83-111] Actual 59"
)


means = c(300,250,200,150,140,130,120,110)

data = data.frame()

for(i in seq_along(text)){
  
  random_numbers = rnorm(100, means[i], 10)
  
  df = data.frame(text = text[i], numbers = random_numbers)
  
  data = rbind(data, df)
}

Titles = c(

"Curules totales por bloques legislativos",
"Curules totales",
"Mayoria absoluta",
"Mayoria calificada"
)
Run Code Online (Sandbox Code Playgroud)

然后我尝试复制这个图:

library(ggridges)


data$color <- ifelse(data$text %in% levels(data$text)[5:8], "maroon", "blue")

ggplot(data, aes(x = numbers, y = text, fill = color)) +
    geom_density_ridges() +
    scale_fill_identity() +
    labs(x = "Numbers", y = "Text") +
    theme_ridges() +
    ggtitle("Ridge Plot of Text vs Numbers")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,我的图形看起来与原始图片一点都不像——有人可以告诉我如何制作更接近原始图片的东西吗?

谢谢!

小智 7

这是我最好的尝试。在此输入图像描述

\n

还有一些工作要做:

\n
    \n
  • 影响 250 左侧直方图颜色的白色矩形。
  • \n
  • 正确的字体
  • \n
  • 绘图网格的正确颜色(当前为黑色)
  • \n
\n

这是我的代码(基于您已经完成的操作)。通过以富文本格式整理摘要统计数据,可以以更简洁的方式完成标签。

\n
text = c(\n  "<span style=\'font-size:9pt; color:#999999\'>MORENA, PVEM, PT</span><br>**307**<span style=\'font-size:9pt; color:#999999\'> [282-326]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**413**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>MORENA, PT<br></span>**263**<span style=\'font-size:9pt; color:#999999\'> [244-280]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**303**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>MORENA, PVEM <br></span>**265**<span style=\'font-size:9pt; color:#999999\'> [243-282]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**267**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>PAN, PRI, PRD, MC <br></span>**193**<span style=\'font-size:9pt; color:#999999\'> [167-211]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**163**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>PAN,PRI, PRD <br></span>**180**<span style=\'font-size:9pt; color:#999999\'> [155-199]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**137**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>PAN, PRI<br></span>**152**<span style=\'font-size:9pt; color:#999999\'> [131-167]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**126**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>PAN, PRD<br></span>**112**<span style=\'font-size:9pt; color:#999999\'> [95-125]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**89**</span>",\n  "<span style=\'font-size:9pt; color:#999999\'>PRI, PRF<br></span>**97**<span style=\'font-size:9pt; color:#999999\'> [83-111]<br>Actual:</span><span style=\'font-size:9pt; color:black\'>**59**</span>"\n)\n\n\nmeans = c(310,270,260,190,170,150,110,100)\n\ndata = data.frame()\n\nfor(i in seq_along(text)){\n  \n  random_numbers = rnorm(1500, means[i], 10+rpois(1,lambda = 4))\n  \n  df = data.frame(text = text[i], numbers = random_numbers)\n  \n  data = rbind(data, df)\n}\n\nTitles = c(\n  "Curules totales por bloques legislativos",\n  "Curules totales",\n  "**Mayor\xc3\xada<br>absoluta**",\n  "**Mayor\xc3\xada<br>calificada**"\n)\n\nlibrary(ggridges)\nlibrary(ggtext)\n\n\ndata$color <- ifelse(data$text %in% text[1:3], "#792C32", "#537DAB")\n\nx_labels = c(as.character(seq(100,200,50)),"<b>250</b>","300","350")\n\ntest = ggplot(data, aes(x = numbers, y = fct_reorder(text,numbers,mean), fill = color)) +\n  geom_density_ridges(stat = "binline",\n                      bins = 150,\n                      #scale = 0.95,\n                      draw_baseline = FALSE,\n                      color = NA,alpha = 0.8) +\n  # geom_rect(aes(xmin = 50, xmax = 250, ymin = 1, ymax = 9),col = NA,fill = "white",alpha = 0.006)+\n  geom_segment(aes(x = 250, y = 1, xend = 250, yend = 9), linewidth = 0.3,col="black")+\n  geom_segment(aes(x = 326, y = 1, xend = 326, yend = 9), linewidth = 0.3,col="black")+\n  geom_richtext(data = data.frame(text = Titles[4],\n                                  y = 9.5),inherit.aes = F,\n                aes(x = 326, y = y, label = text),\n                fill=NA,label.color = NA,hjust = 0.5,vjust=1,size=2.5)+\n  scale_fill_identity() +\n  geom_richtext(data = data.frame(text = Titles[3],\n                                  y = 9.5),inherit.aes = F,\n                aes(x = 250, y = y, label = text),\n                fill=NA,label.color = NA,hjust = 0.5,vjust=1,size=2.5)+\n  geom_richtext(data = data.frame(text,y = seq(8.5,1.5,-1)),inherit.aes = F,\n            aes(x = 50, y = y, label = text),\n            fill=NA,label.color = NA,hjust = 1)+\n  scale_x_continuous(limits = c(0,360),\n                     breaks = seq(100,350,50),\n                     labels = x_labels)+\n  scale_y_discrete(expand = c(0.0, 0))+\n  labs(title = Titles[1],\n       x = Titles[2],\n       y = "") +\n  theme_minimal()+\n  theme(panel.grid.major.y = element_line(linewidth = 0.3,colour = "black"),\n        panel.grid.minor.x = element_blank(),\n        axis.ticks.x = element_blank(),\n        axis.ticks = element_blank(),\n        axis.ticks.y = element_blank(),\n        axis.text.y = element_blank(),\n        axis.text.x = element_markdown())\n
Run Code Online (Sandbox Code Playgroud)\n