2014-10-08 13 views
8

Nie znam nazwy tego rodzaju działki (mile widziane są komentarze dookoła tego). Zasadniczo jest to barplot z wypełnionymi glifami, które wskazują na stratę/zysk. Glif jest jak strzała kodująca informacje o kierunku, wielkości i pozwalającym zobaczyć belkę pod ziemią.Wykres różnicy

enter image description here

Wygląda to interesujące, ale nie można myśleć o tym, jak to zrobić w ggplot2 (szkieletu sieci). Jak moglibyśmy odtworzyć tę fabułę w ggplot2/grid framework (zarówno podstawowe rozwiązania, jak i kompletność pytań). W szczególności glify, a nie tekst, ponieważ jest już całkiem prosty w ggplot2.

Oto kod do tworzenia danych i tradycyjnych nakładek & z odwróconymi wykresami słupkowymi i liniowymi, aby pokazać typowe sposoby wizualizacji tego typu danych.

set.seed(10) 
x <- sample(30:60, 12) 
y <- jitter(x, 60) 

library(ggplot2) 
dat <- data.frame(
    year = rep(2012:2013, each=12), 
    month = rep(month.abb, 2), 
    profit = c(x, y) 
) 


ggplot() + 
geom_bar(data=subset(dat, year==2012), aes(x=month, weight=profit)) + 
geom_bar(data=subset(dat, year==2013), aes(x=month, weight=profit), width=.5, fill="red") 

ggplot(dat, aes(x=month, fill=factor(year))) + 
    geom_bar(position="dodge", aes(weight=profit)) + 
    coord_flip 

ggplot(dat, aes(x=month, y=profit, group = year, color=factor(year))) + 
    geom_line(size=1) 

enter image description here

enter image description here

enter image description here

+0

'annotation_custom' z' polygonGrob's może działać. – hrbrmstr

+4

Twoje przykłady są lepsze niż oryginalny wykres. Glify są co najmniej mylące, w najgorszym - mylące. – thelatemail

+0

Jak @thelatemail powiedział! Wykreślanie dwóch różnych zestawów danych (wartości i delt) na jednym wykresie nie jest zalecane, ponieważ jest trudne do odczytania. –

Odpowiedz

11

Oto przykład, być może istnieją inne sposoby, choć

dat <- data.frame(
    year = rep(2012:2013, each=12), 
    month = factor(rep(1:12, 2), labels=month.abb), 
    profit = c(x, y) 
) 
dat2 <- reshape2::dcast(dat, month~ year, value.var = "profit") 
names(dat2)[2:3] <- paste0("Y", names(dat2)[2:3]) 

ggplot(dat2) + 
    geom_bar(aes(x=month, y = Y2012), stat = "identity", fill = "grey80", width = 0.6) + 
    geom_segment(aes(x=as.numeric(month)-0.4, xend = as.numeric(month)+0.4, y = Y2013, yend = Y2013)) + 
    geom_segment(aes(x = month, xend = month, y = Y2013, yend = Y2012, colour = Y2013 < Y2012), 
       arrow = arrow(60, type = "closed", length = unit(0.1, "inches")), size = 1.5) + 
    theme_bw() 

enter image description here

+0

Idealny. +1 Zgadzam się z @ mailem, to może nie być najlepsze podejście, jeśli szukasz większych wzorów. Myślę, że wykresy liniowe zrobiłyby to lepiej. Ale wykres tutaj faktycznie poprawia się na projekcie, który pokazałem w ten sposób, że strzały pokrywają mniej z paska geom. Jeśli ktoś chciałby dokładniejszych porównań miesiąc po miesiącu, to podejście może przynieść pewne korzyści. Nie znam żadnych badań empirycznych, które porównałyby percepcję tego rodzaju wykresu dla takiego zadania, ale widzę, że może to mieć zalety w umożliwieniu szybkiego zidentyfikowania zmienności i wielkości miesiąca bez utraty informacji o ogólnym zysku. –

+0

Można skoncentrować się na kolorowej strzale lub zwrócić uwagę na paski lub uwagę na linię różnicy (nie znamy ich nazwy technicznej, ale linie horyzontalne drugiego roku), nie będąc zbytnio rozproszonymi przez konkurencyjne atuty wyprzedzające. Jakość i wygląd wykresu są zgodne z zamierzonym celem. Widzę, że ten typ wykresu może mieć zalety w odpowiednich okolicznościach. Dziękuję za podejście. –

Powiązane problemy