2017-02-06 4 views
2

Я пытаюсь воспроизвести красивую визуализацию наGoogle с моим собственным набором данных, показывающим, сколько людей моя компания нанимала в неделю. Набор данных (названный hiresbyweek) выглядит следующим образом (это 25 из 81 строк, link to full dataset here)Использование ggplot2 для репликации Ритм визуализации пищевых продуктов

  Week Year total.Hires  Month WeekNum 
    2014-05-05 0:00:00 2014   1  May  18 
    2014-05-12 0:00:00 2014   1  May  19 
    2014-05-19 0:00:00 2014   1  May  20 
    2014-05-26 0:00:00 2014   1  May  21 
    2014-08-04 0:00:00 2014   1 August  31 
    2014-09-08 0:00:00 2014   1 September  36 
    2015-02-23 0:00:00 2015   3 February  08 
    2015-03-23 0:00:00 2015   4  March  12 
    2015-05-04 0:00:00 2015   1  May  18 
    2015-06-01 0:00:00 2015   1  June  22 
    2015-06-08 0:00:00 2015   1  June  23 
    2015-09-14 0:00:00 2015   3 September  37 
    2015-09-21 0:00:00 2015   4 September  38 
    2015-09-28 0:00:00 2015   15 September  39 
    2015-10-05 0:00:00 2015   20 October  40 
    2015-10-12 0:00:00 2015   47 October  41 
    2015-10-19 0:00:00 2015   40 October  42 
    2015-10-26 0:00:00 2015   39 October  43 
    2015-11-02 0:00:00 2015   5 November  44 
    2015-11-09 0:00:00 2015   2 November  45 
    2015-11-16 0:00:00 2015   7 November  46 
    2015-11-23 0:00:00 2015   1 November  47 
    2015-11-30 0:00:00 2015   7 November  48 
    2015-12-07 0:00:00 2015   3 December  49 
    2015-12-14 0:00:00 2015   7 December  50 

В настоящее время я сделал это, насколько это:

ggplot(hiresbyweek,aes(x=WeekNum, y=total.Hires,fill=as.factor(Year))) 
+geom_histogram(stat="identity", aes(x=WeekNum, y=total.Hires,fill=as.factor(Year))) 
+coord_polar() 
+scale_fill_manual(values=c("#ACD9F4","#005DA6","#EC008C")) 
+scale_x_discrete(labels = as.factor(hiresbyweek$Month)) 
+scale_y_discrete(expand=c(0.5,0)) 
+theme(text=element_text(family="Avenir") 
     , axis.ticks = element_blank() 
     , panel.grid = element_blank() 
     , panel.background = element_blank() 
     ) 

Это производит что-то близко:

enter image description here

Существенная проблема заключается в:

1) эти метки не находятся там, где они должны быть: обратите внимание на то, как самые большие числа в октябре, но согласно диаграмме они будут в основном в апреле или марте.

Ницца к имущим:

1) Я хотел бы, чтобы сгруппировать и вращают те названия а-ля ритм еды диаграммы, так что было бы проще этикетки

2) Я хотел бы значительно уменьшают относительный размер указанных стержней; Я сделал это как count (geom_historgram (stat = "count") или stat = "bin"), но это делает их равными и устраняет важность масштаба, что является ключевым моментом здесь.

3) Я хотел бы вставить пробелы между барами. Я попытался добавить в цвет = «белый» a la и ggplot (hiresbyweek, aes (x = WeekNum, y = total.Hires, color = "white", fill = as.factor (Year))) и geom_histogram (stat = "identity", aes (x = WeekNum, y = total.Hires, fill = as.factor (Year), color = "white")), которые как странно получили розовый контур ...

help on the первая часть важна (я бы чувствовал, что это было тогда презентабельно), но все приветствуются. Спасибо за ваше время и мысли.

+0

также, пункт, который я заметил, в то время как я пишу это представление: rstudio, кажется, не нравится, если я очистить форматирование на код выше: Я на самом деле вставили, что в моем rstudio как одна строка, чтобы заставить его работать. форматирование его на несколько строк обычно прерывало его. кто-нибудь хочет объяснить мне, почему это так? – ike

+1

Знак '+' должен быть на конце строки – GGamba

+0

действительно? вместо фронта? это оно? смешно, мне понравилось, как он выглядел с + впереди. такие дела. – ike

ответ

3

Я ждал, когда кто-то еще опубликует лучший и менее хакерский ответ, но я надеюсь, что это будет делать в то же время.

# 1. We can control the order of geom_bars based on the levels of the factor of X. 
# So we make a new factor variable and ensure that the levels are in the order of 
# < January1, January2, ..., February2, ..., December3, December4 > 
hiresbyweek <- hiresbyweek[order(hiresbyweek$WeekNum),] 
hiresbyweek$X <- factor(paste0(hiresbyweek$WeekNum, hiresbyweek$Month), 
        levels = unique(paste0(hiresbyweek$WeekNum, hiresbyweek$Month))) 

# 2. But we don't want the axis labels to be: "Jan1, Jan2, Jan3, ..." 
# Instead we'll extract only the month out of the X variable (though notice the weekNum 
# variable was important so we could get the right order and distinct factor levels) 
# But we also don't want repeated axis labels: "Jan, "Jan", "Jan", "Feb", "Feb", .... 
# So try to place the unique axis label close to the middle, and leave the rest blank 
# (ie. "", "Jan", "", "", "Feb") 
makeLabels <- function(x) { 
    x <- gsub("[0-9]", "", x) 
    labs <- c(); 
    for (a in unique(x)) { 
    b <- rep("", length(x[x == a])) 
    b[ ceiling(length(x[x==a])/2) ] <- a 
    labs <- append(labs, b) 
    } 
    return(labs) 
} 

# 3. Angle the axis labels to imitate Google's Rhythm of Food 
ang <- -360/length(unique(hiresbyweek$X)) * seq_along(hiresbyweek$X) 
ang[ang <= -90 & ang >= -300] <- ang[ang <= -90 & ang >= -300] -180 

ggplot(hiresbyweek, aes(x = X, y = total.Hires,fill = as.factor(Year))) + 
    geom_histogram(stat="identity", width = 0.5) + # Use width arg for more space between bars 
    coord_polar() + 
    scale_x_discrete(labels = makeLabels) + # Apply getLabel function to X 
    scale_y_discrete(expand=c(0.5,0)) + 
    scale_fill_manual(values=c("#ACD9F4","#005DA6","#EC008C")) + 
    theme(axis.ticks = element_blank(), 
    panel.grid = element_blank(), 
    panel.background = element_blank(), 
    text = element_text(family="Avenir"), 
    title = element_blank(), # Remove all titles 
    axis.text.x = element_text(angle= ang)) # Apply angles to x-axis labels 

Результат: result

+0

Это довольно блестяще, спасибо. часть вопроса была проблемой, которую я пытался решить, так что спасибо за то, что вы нашли это. Я сделал вторую версию, где я делал эти месяцы как аббревиатуры, думая, что это сделает расстояние еще больше на метках месяца, но это, казалось, сделало это более резким на самом деле, поэтому я оставил это.Мне было бы интересно, если бы это было возможно. во всяком случае, это было блестящее улучшение, спасибо. – ike

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