ggplot2 построит несколько линий плотности на одном трехмерном графике - PullRequest
0 голосов
/ 30 сентября 2018

Я провел IQ тест в одной группе (100 студентов) в течение 5 лет.как:

В 2005 году IQ Джека равен 100, IQ Эми - 99, Джон ...

в 2006 году, IQ Джека - 105, IQ Эми - 95, Джон ...

...

Я хочу оценить плотность IQ в разные годы.И нарисуйте линии плотности разных лет на одном графике.Вот пример некоторых данных.

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 голосов
/ 01 октября 2018

Спасибо @Anders Ellern Bilgrau за сайт, который он / она предложил, с которого я узнал кое-что о ggridges

Я использую ggridges , чтобы закончить свою работу.Можно получить помощь по адресу

https://cran.r -project.org / web / packages / ggridges / vignettes / ввести.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

Хотя это не полностью соответствует моему требованию, оно может помочь проанализировать изменение формы вероятности.

0 голосов
/ 30 сентября 2018

Есть ли какая-то причина, по которой вы хотите сделать трудный для чтения 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

См. Дополнительные примеры здесь.

Даже если вы настаиваете на трехмерном графике, подобном показанному, как вы предлагаете выполнить интерполяцию между годами?

Править

Здесь - очень связанный пост переполнения стека.Я знаю, что это не 3D, как вы просите.Но для того, чтобы сделать это, вам все равно нужно подумать о том, как интерполировать между годами (которые в вашем случае являются категориальной переменной).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...