Сделайте фон графика разных цветов в разных регионах - PullRequest
33 голосов
/ 02 апреля 2012

Я делаю простую диаграмму в R, используя пакет ggplot2. Вместо серого по умолчанию я хотел бы разделить фон на пять областей, каждая из которых имеет свой (но одинаково заниженный) цвет. Как мне это сделать?

Точнее говоря, я бы хотел, чтобы пять цветных областей имели значения 0-25, 25-45, 45-65, 65-85 и 85-100, где цвета представляют собой хуже, чем бронза, бронза, серебро, золото и платина соответственно. Предложения по цветовой гамме тоже приветствуются.

Ответы [ 2 ]

44 голосов
/ 02 апреля 2012

Вот пример для начала:

#Fake data
dat <- data.frame(x = 1:100, y = cumsum(rnorm(100)))
#Breaks for background rectangles
rects <- data.frame(xstart = seq(0,80,20), xend = seq(20,100,20), col = letters[1:5])


#As Baptiste points out, the order of the geom's matters, so putting your data as last will 
#make sure that it is plotted "on top" of the background rectangles. Updated code, but
#did not update the JPEG...I think you'll get the point.

ggplot() + 
  geom_rect(data = rects, aes(xmin = xstart, xmax = xend, ymin = -Inf, ymax = Inf, fill = col), alpha = 0.4) +
  geom_line(data = dat, aes(x,y))

enter image description here

5 голосов
/ 02 апреля 2012

Я хотел переместить линию - или столбцы гистограммы - на передний план, как предложено baptiste выше, и исправить фон с помощью + theme(panel.background = element_rect(), panel.grid.major = element_line( colour = "white") ), к сожалению, я мог сделать это только отправив geom_bar дважды, надеюсь, кто-то сможет улучшить код и сделать ответ завершенным.

background <- data.frame(lower = seq( 0  , 3  , 1.5 ), 
                         upper = seq( 1.5, 4.5, 1.5 ),
                         col = letters[1:3])
ggplot() + 
    geom_bar( data = mtcars , aes( factor(cyl) ) ) + 
    geom_rect( data = background , 
              mapping = aes( xmin = lower , 
                            xmax = upper ,
                            ymin = 0 ,
                            ymax = 14 ,
                            fill = col ) ,
              alpha = .5 ) + 
    geom_bar(data = mtcars,
             aes(factor(cyl))) +
             theme(panel.background = element_rect(),
                   panel.grid.major = element_line( colour = "white"))

производит это, geom_bar and geom_rect

Взгляните на этот сайт с предложениями цветовой схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...