2016-11-25 1 views
1

Я получил data.frame во вложенном списке после того, как я разделил их заданным пороговым значением. Тем не менее, я собираюсь создать график стека, чтобы сделать данные более информативными и понятными. Я думаю, что использование пакетов ggplot2 может быть хорошим выбором, но я совершенно новичок в использовании этих пакетов, делая это неинтуитивно. Как я могу получить график строки стека для data.frame во вложенном списке? Любой способ получить штрих-график или круговую диаграмму для объекта data.frame легко? Есть идеи ?Как я могу получить график стека для data.frame во вложенном списке?

мини данные:

myList <- list(
    hola= data.frame(from=seq(1, by=4, len=15), to=seq(3, by=4, len=15), value=sample(30, 15)), 
    boo = data.frame(from=seq(3, by=7, len=20), to=seq(6, by=7, len=20), value=sample(45, 20)), 
    meh = data.frame(from=seq(4, by=8, len=25), to=seq(7, by=8, len=25), value=sample(36, 25)) 
) 

вспомогательная функция:

splitter <- function(mlist, threshold) { 
    res <- lapply(mlist, function(x) { 
    splt <- split(x, ifelse(x$value >= threshold, "pass", "fail")) 
    }) 
    return(res) 
} 

#' @example 
splitMe <- splitter(myList, threshold = 10) 

Я хочу создать стек бар график, круговая диаграмма с помощью ggplot2 пакетов. Как я могу сделать это легко? Может ли кто-нибудь указать мне, как выполнить эту задачу?

Как я могу получить график шлейфа стека для data.frame во вложенном списке? Как я могу достичь желаемого графика вывода? Большое спасибо

ответ

3

Вы можете не получить эту диаграмму непосредственно с этим. Но я думаю, вы получите эту идею. Ключ вам нужно, чтобы ваши данные были в надлежащем формате для построения.

Здесь я делаю некоторые манипуляции данными для получения данных в кадре данных.

df=as.data.frame(unlist(lapply(splitMe,function(x) unlist(x)))) 
df$col=row.names(df) 
names(df)[1]='val';row.names(df)=NULL 

Вы можете сделать динамические колонки более динамичными.

df$col=gsub(paste("\\.|*[0-9]",lapply(splitMe[[1]], function(x) paste(names(x), collapse = "|"))[1], collapse = "", sep = "|"),"",df$col) 
df$col1=gsub(paste(lapply(splitMe, function(x) paste(names(x), collapse = "|"))[1], collapse = "", sep = "|"),"",df$col) 
df$col2=gsub(paste(names(splitMe), collapse = "|"),"",df$col) 

Теперь я получаю данные в формате, с которым ggplot может легко работать.

library(ggplot2) 
ggplot(data = df, aes(x = col1, fill = col2)) + geom_bar() 

И вы получите такой сюжет. enter image description here

+0

вы должны захватить имена списков и кормить их соответствующим образом, чтобы сделать его динамичным. Для круговых диаграмм смотрите [здесь] (http://www.sthda.com/english/wiki/ggplot2-pie-chart-quick-start-guide-r-software-and-data-visualization). –

+0

Спасибо. Есть ли шанс сделать ваше решение более динамичным? Я имею в виду, что имя списка и столбец могут быть изменены с помощью другого входного списка. Как новичок, могу ли я немного поразмышлять над этим? извините за этот вопрос. –

+1

Получение имен списка может быть более динамичным. посмотрите на редактирование. –

1
I get inspiration form Chirayu Chamoli' solution : 

plot_data <- df %>% 
    group_by(col1, col, col2) %>% 
    tally %>% 
    group_by(col, col2) %>% 
    mutate(percentage = n/sum(n), cumsum = cumsum(percentage)) 


library(ggplot2) 
ggplot(data = plot_data, aes(x = col1, y=n ,fill = col2, width = .85)) + 
    geom_bar(stat = "identity")+ 
    geom_text(aes(label=n), position = position_stack(vjust = .5)) 

enter image description here