ggplot2在一张3d图表中绘制几条密度线

时间:2018-09-30 11:52:29

标签: r ggplot2 plotly

我在5年中对同一个小组(100名学生)进行了智商测试。 喜欢:

2005年,杰克的智商为100,艾米的智商为99,约翰...

2006年,杰克的智商为105,艾米的智商为95,约翰...

...

我想估计不同年份的智商密度。并在一张图中绘制不同年份的密度线。这是一些数据示例。

year2005<-rnorm(100,100,2)
year2006<-rnorm(100,98,1)
year2006<-rnorm(100,101,4)

如何像下图所示绘制它们? enter image description here

enter image description here

上面是2D图表。很难理解几年之间的趋势,因为我必须知道红色是2016年,黑色是2015年。3D并不困难,这就是我坚持使用3D的原因

2 个答案:

答案 0 :(得分:1)

您是否有任何理由想要制作难以阅读的3D图而不是类似的东西?

library("ggplot2")

n <- 100
year2005<-rnorm(n,100,2)
year2006<-rnorm(n,98,1)
year2007<-rnorm(n,101,4)

dt <- data.frame(year = rep(c("2005", "2006", "2007"), each = n),
                 value = c(year2005, year2006, year2007))

ggplot(dt, aes(value, fill = year, colour = year)) +
  geom_density(alpha = 0.1)

enter image description here

See more examples here.

即使您坚持显示的3D图,您如何建议在年份之间进行插值?

编辑

Here是一个非常相关的堆栈溢出文章。我知道这不是3D,就像您的要求一样。但是,为此,您仍然需要考虑如何在年份之间进行插值(在您的情况下,这似乎是一个绝对变量)。

答案 1 :(得分:1)

感谢@Anders Ellern Bilgrau提供的网站,他/她建议我从该网站中学到有关 ggridges

的知识

我用 ggridges 完成工作。可以从

获得帮助

https://cran.r-project.org/web/packages/ggridges/vignettes/introduction.html

library(devtools)
install_github("clauswilke/ggridges")
ggplot(dt, aes(x = value, y = year, fill =0.5-abs(0.5-..ecdf..))) +
  stat_density_ridges(geom="density_ridges_gradient",scale=1, calc_ecdf=TRUE,
                      jittered_points = T) + 
  scale_fill_viridis(name = "Tail Probability", direction = -1) 
  +theme_minimal()+
  theme(plot.title=element_text(size=17,color="black",face="bold",hjust=0.5), 
        axis.title.y = element_blank())+ 
  labs(x="...")+
  scale_y_discrete(expand = c(0.01, 0)) +   
  scale_x_continuous(breaks=seq(0,240,40),expand = c(0, 0)) 

enter image description here

尽管它不能完全满足我的要求,但可以帮助分析概率形状的变化。