2016-01-15 1 views
1

Недавно я обновил ggplot2 пакет и столкнулся с серьезными проблемами, рисуя горизонтальные линии для средних значений для каждой группы, используя facets. Я считаю, this Сообщение больше не действит?ggplot2: добавить строку для средней группы (ошибка: нет stat, называемого StatHline.)

Я создаю временные ряды график, используя следующий код:

ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) + 
    geom_line(aes(colour="red"),lwd=1.3) + 
    geom_smooth() + 
    geom_line(stat = "hline", yintercept = "mean")+ 
    scale_x_date(labels=date_format("%b-%y"),breaks ="2 month")+ 
    geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+ 

    geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+ 
    geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+ 
    ylab("DL Prod for All Skills")+ 
    ggtitle("BVG1 DL Prod for All Skills 2014-2015")+ 
    theme(axis.title.y = element_text(size = 15,face="bold",color="red"), 
      plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"), 
      axis.title.x = element_blank(), 
      legend.position="none")+ 
    facet_wrap(~Patch) 

номер один вопрос, что я больше не могу использовать stat = "hline" в geom_line(stat = "hline", yintercept = "mean"), поскольку он дает следующее сообщение об ошибке: Error: No stat called StatHline. так поэтому я изменил его:

ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) + 
    geom_line(aes(colour="red"),lwd=1.3) + 
    geom_smooth() + 
    geom_hline(yintercept = mean(p2p_dt_SKILL_A$Prod_DL))+ 
    scale_x_date(labels=date_format("%b-%y"),date_breaks ="2 month")+ 
    geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+ 

    geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+ 
    geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+ 
    ylab("DL Prod for All Skills")+ 
    ggtitle("BVG1 DL Prod for All Skills 2014-2015")+ 
    theme(axis.title.y = element_text(size = 15,face="bold",color="red"), 
      plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"), 
      axis.title.x = element_blank(), 
      legend.position="none")+ 
    facet_wrap(~Patch) 

Но это не нарисовать горизонтальную линию средств на патч. Она просто принимает общее среднее для Prod_DL См ниже: enter image description here

Есть ли какие-либо новые способы в настоящее время для расчета вида на группу и рисовать горизонтальные линии?

Благодаря

UPDATE

Вот что я сделал:

#first create a dataframe which holds patch and mean values for prod dl, this will then be used in geom_hline() 
mean_Prod_DL <- p2p_dt_SKILL_A%>% 
           group_by(Patch)%>% 
           summarise(mean_Prod_DL_per_patch = mean(Prod_DL)) 


ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) + 
     scale_x_date(labels=date_format("%b-%y"),date_breaks ="2 months")+ 
     geom_line(aes(colour="red"),lwd=1.3) + 
     geom_smooth() + 
     geom_hline(data = mean_Prod_DL,aes(yintercept = mean_Prod_DL_per_patch),lty=2)+ 
     geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+ 
     geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+ 
     geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+ 
     geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-12-04"]))+ 
     ylab("DL Prod for All Skills")+ 
     ggtitle("BVG1 DL Prod for All Skills 2014-2016")+ 
     theme(axis.title.y = element_text(size = 15,face="bold",color="red"), 
       plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"), 
       axis.title.x = element_blank(), 
       legend.position="none")+ 
     facet_wrap(~Patch) 

enter image description here

+2

вы можете создать новый набор данных с yintercept для каждого фасета – MLavoie

+0

@MLavoie есть ли лучшее решение для рисования горизонтальных линий для каждой группы средств ? – Shery

+0

может быть, кто-нибудь придумает лучшее решение. – MLavoie

ответ

3

Я согласен с @MLavoie, что только вычислительное количество интереса является самым простым решением , Не уверен, каким образом вы ищете что-то «лучше».

Пример:

# sample data 
my_df <- data.frame(x=rep(1:100, 4), 
        y=cumsum(rnorm(400)), 
        category=rep(letters[1:4], each=100)) 

# calculate the hline data in one line with data.table 
library(data.table) 
setDT(my_df)[, cat_mean := mean(y), by=category] 

# plot 
ggplot(my_df, aes(x=x, y=y, group=category)) + 
    geom_line(color='red') + 
    geom_smooth(color='blue') + 
    geom_hline(aes(yintercept=cat_mean)) + 
    facet_wrap(~category) 

Результат:

enter image description here

+0

немного отличается от того, что вы сделали ... но все тот же вещь ... добавил ответ – Shery

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