Гистограммы частот с фасетами - вычисление процентов по группам, используемым в фасете, вместо одной объединенной группы

Я создал график, используя фасетную функцию в R.

График, который я создал, должен показать процентную частоту по оси Y и некоторое значение по оси x. Я хотел бы использовать функцию фасета, потому что мне нравится внешний вид. Однако, когда используется фасетная функция, моя процентная частота рассчитывается с использованием всех наблюдений, независимо от группы, в которой они находятся.

Я хочу по-прежнему использовать фасетную функцию, но рассчитывать процентные частоты только для группы.

Вот код, который я использовал до сих пор для создания графиков:

Age <- data.frame(mydata$Age, mydata$Year)
colnames(Age) <- c("Age", "Year")

Age_wk <- Age[complete.cases(Age$Age),] #to remove NA's present
med.fac1 = ddply(Age_wk, .(Year), function(.d) # to create medians within facet groups
data.frame(x=median(.d$Age)))

library(plyr)

library(ggplot2)
library(scales)
total_age <- ggplot(Age_wk, aes(x= Age)) + geom_histogram(aes(y=   (..count..)/sum(..count..)), binwidth=1)+ scale_y_continuous(labels=percent_format(),     name="Frequency (%)")+
     xlab("Age (yrs)") + scale_x_continuous(limits = c(1,30), breaks =seq(1,30,1)) + 
     facet_grid(Year ~.)+ # making facet grid so  catch Year is vertical
     geom_vline(data=med.fac1, aes(xintercept=x), type="dashed")+
     # making vertical medians   with faceted set up
     ggtitle ("Age Frequencies across Catch Years")+
     theme(panel.grid.major = element_blank(), panel.grid.minor=element_blank(), # removes both    horizontal and vertical gridlines
           panel.background=element_rect(colour="black", fill="white")) 

Вот подмножество данных:

structure(list(Age = c(6L, 7L, 5L, 6L, 7L, 9L,6L, 7L, 5L, 6L, 7L, 9L,6L, 7L, 5L, 6L, 7L,     9L), Year = c(2011, 
2011, 2011, 2011, 2011, 2011, 2012, 2012, 2012, 2012, 2012, 2012, 2013, 2013, 2013,    2013, 2013, 2013 )), .Names = c("Age", "Year"), row.names = c(NA, 6L), class = "data.frame")

Я хочу рассчитать возрастные частоты по годам (2011–2013), а не для всей объединенной группы. Похоже, это происходит, когда я использую фасетную функцию. Есть ли способ отменить это? Или, может быть, это именно то, что делает facet_grid ... Мысли оценены. Спасибо


person Elizabeth    schedule 09.06.2014    source источник
comment
Прочтите информацию о том, как создать минимально воспроизводимый пример. Это облегчит другим помощь вам.   -  person Jaap    schedule 09.06.2014
comment
@ Jaap- извини, я знал, что что-то забыл: / Сделаю это сейчас   -  person Elizabeth    schedule 09.06.2014


Ответы (1)


Ваш текущий набор данных

Age = structure(list(Age = c(6L, 7L, 5L, 6L, 7L, 9L,6L, 7L, 5L, 6L, 7L, 9L,6L, 7L, 5L, 6L, 7L,9L), 
               Year = c(2011, 2011, 2011, 2011, 2011, 2011, 2012, 2012, 2012, 2012, 2012, 2012, 2013, 2013, 2013,    2013, 2013, 2013 )), .Names = c("Age", "Year"), 
          row.names = c(1:18), class = "data.frame")

table(Age)
   Year
Age 2011 2012 2013
  5    1    1    1
  6    2    2    2
  7    2    2    2
  9    1    1    1

Итак, при составлении процентного графика они будут выглядеть одинаково ...

Я подготовил фиктивный набор данных и использовал свой ранее предложенный код

Age_wk = data.frame(Age = sample(5:9,130,replace=TRUE),
                 Year = sample(2010:2014,130,prob=c(0.05,0.3,0.3,0.3,0.05),replace=TRUE))

ggplot(Age_wk[Age_wk$Year %in% 2011:2013,], aes(x= Age)) + geom_histogram(aes(y=   (..count..)/sum(..count..), fill=as.factor(Age)), col = 'black', binwidth=1) + 
  scale_y_continuous(labels=percent_format(), name="Frequency (%)")+
  xlab("Age (yrs)") +  facet_grid(Year ~ ., scales = "free") + # making facet grid so  catch Year is vertical
  geom_vline(data=med.fac1, aes(xintercept=x), type="dashed")+
  # making vertical medians   with faceted set up
  ggtitle ("Age Frequencies across Catch Years")+
  theme(panel.grid.major = element_blank(), panel.grid.minor=element_blank(), # removes both    horizontal and vertical gridlines
        panel.background=element_rect(colour="black", fill="white"))

Выход для того же приведен ниже.

введите описание изображения здесь

person vrajs5    schedule 09.06.2014
comment
@ vrajs5- year является числовым, однако это не похоже на то, что я ищу. - person Elizabeth; 11.06.2014
comment
@ Jaap - Я добавил небольшой набор данных. Я также прочитал отдельно Нормализацию фасетных гистограмм в ggplot2, опубликованном еще в 2013 году, добавив параметр ..ncount вместо ..count .., но это не работает. Может, стоит отказаться от огранки именно для этой цели? - person Elizabeth; 11.06.2014