2014-09-17 4 views
1

Я хотел бы рассчитать плотности от двух разных категорий как линии, а затем среднюю плотность каждой категории наложенной как альфа. Ниже приведен код, показывающий «средние» плотности, суммируемые только по болезни и лечению. Как я могу наложить это на линии, представляющие плотность для каждого человека (предпочтительно красный для болезни = 1 и синий для болезни = 2)? т.е. линия за болезни, комбинированное лечение в примере:ggplot индивидуальные плотности со средней плотностью

# Initialise data frame in melted form 
    # 2 disease categories 
    # 10 people from each disease 
    # 2 treatments given to each individual 
    # 25 variables with measured values per person/treatment combination 
set.seed(6737334) 
df <- data.frame(id = 1:(2*10*2*25), var = rep(1:25, times=2*10), 
       val = rnorm(2*10*2*25), 
       disease = as.factor(rep(1:2, each=2*10*25)), 
       treat = as.factor(rep(1:2, times=10, each=25))) 

plot <- ggplot(df, aes(x=val, fill=disease)) + geom_density(alpha=.3) + 
    facet_grid(treat ~ .) 

print(plot) 

Image of ggplot produced by the above code

################## РЕДАКТИРОВАТЬ

Этот код очень очень близко к моему желаемому решению. Как я могу сделать линии, в настоящее время черные, соответствовать цвету категории болезни?

# Initialise data frame in melted form 
    # 2 disease categories 
    # 10 people from each disease 
    # 2 treatments given to each individual 
    # 25 variables with measured values per person/treatment combination 
set.seed(6737334) 
df <- data.frame(id = 1:(2*10*2*25), var = rep(1:25, times=2*10), 
       test = as.factor(rep(1:(2*10), each=25)), 
       val = rnorm(2*10*2*25), 
       disease = as.factor(rep(1:2, each=2*10*25)), 
       treat = as.factor(rep(1:2, times=10, each=25))) 

ggplot(df) + 
    geom_density(aes(x=val, group=test, color=disease)) + 
    geom_density(aes(x=val, fill=disease), color=NA, alpha=.5) + 
    facet_grid(treat ~ .) 

enter image description here

ответ

1

Метод оказался использовать group вариант aes() с interaction. См. Полный пример ниже. Спасибо @Jaap выше и this question за указание в правильном направлении.

# Initialise data frame in melted form 
    # 2 disease categories 
    # 10 people from each disease 
    # 2 treatments given to each individual 
    # 25 variables with measured values per person/treatment combination 
set.seed(6737334) 
df <- data.frame(id = 1:(2*10*2*25), var = rep(1:25, times=2*10), 
       test = as.factor(rep(1:(2*10), each=25)), 
       val = rnorm(2*10*2*25), 
       disease = as.factor(rep(1:2, each=2*10*25)), 
       treat = as.factor(rep(1:2, times=10, each=25))) 

ggplot(df) + 
    geom_density(aes(x=val, group=interaction(test,disease), colour=disease)) + 
    geom_density(aes(x=val, fill=disease), alpha=.5) + 
    guides(fill=guide_legend(title="mean")) +  # else legend title 'NA' 
    facet_grid(treat ~ .) 

enter image description here

+0

+1 для решения проблемы самостоятельно! – Jaap

2

Если я правильно понимаю ваш вопрос, это, вероятно, то, что вы ищете:

ggplot(df) + 
    geom_density(aes(x=val, color=disease)) + 
    geom_density(aes(x=val), color=NA, fill="grey", alpha=.5) + 
    facet_grid(treat ~ .) + 
    theme_bw() 

, который дает: enter image description here

+0

Не совсем. Я бы хотел 10 строк и один «заполнять» для каждой болезни, т. Е. 20 линий и 2 заполнения на участке. Каждая линия соответствует плотности комбинации лечения заболеваний. – kungfujam

+0

См. Редактирование в вопросе уточнения – kungfujam

+0

Я получил там в конце. Большое спасибо за вашу помощь. – kungfujam

Смежные вопросы