2015-07-31 4 views
2

У меня очень большой набор данных, который я рисую на Shiny с помощью ggplot. У меня есть слайдер, привязанный к значениям по оси x, с помощью которых я хотел бы перекрасить выбранное подмножество данных и оставить остальную часть данных как есть.Оверлей Два ggplot in Shiny

Самый простой вариант - воссоздать весь сюжет, но поскольку это большой набор данных, это очень медленный процесс. В качестве альтернативы я подумывал о том, чтобы исходный сюжет оставался таким, как есть, и помещал еще один сюжет поверх него с plot.background = 'none' и только цветными точками. Я не могу этого добиться с renderPlot в server.r и plotOutput в ui.r -

server.r:

output$Plot1= renderPlot({ 
    ggplot(mtcars) + geom_point(aes(x = mpg, y = wt)) 
}) 

output$Plot2= renderPlot({ 
     ggplot(mtcars[mtcars$mpg > 15,]) + geom_point(aes(x = mpg, y = wt), color = 'Efficient') 
}) 

ui.r (я не знаю, как уместить Plot2 в этом) :

fluidRow(
       class = 'Plot1Row', 
       column(
        plotOutput(
        "Plot1", 
        width = '100%' 
       ), 
        width = 12 
       ) 
      ) 

Любые советы?

+0

Возможно, было бы лучше изменить график, используя функции сетки. (Пожалуйста, укажите воспроизводимый пример ...) – Roland

+0

Не могли бы вы указать мне на функцию сетки? Тем временем я добавляю игрушечную диаграмму. – TheComeOnMan

+0

Вы считаете «ggvis» в качестве опции? – tonytonov

ответ

1

Вот пример объяснения мой комментарий:

library(ggplot2) 
p <- ggplot(mtcars[mtcars$mpg > 15,]) + geom_point(aes(x = mpg, y = wt), color = 'green') 
p  

#produce an otherwise identical gtable with a subset of points with different color 
p1 <- ggplot(mtcars[mtcars$mpg > 15,]) + geom_blank(aes(x = mpg, y = wt), color = 'green') + 
    geom_point(data = mtcars[mtcars$mpg > 25,], aes(x = mpg, y = wt), color = 'blue') 
g1 <- ggplot_gtable(ggplot_build(p1)) 

library(gtable) 
#find the correct viewport 
seekViewport(grid.grep("panel", grep = TRUE)$name) 
#draw just the points 
grid.draw(gtable_filter(g1, "panel")$grobs[[1]]$children$geom_point.points) 

resulting plot

Это не перерисовывать весь сюжет. Поскольку я не блестящий пользователь, вам придется проверить себя, как сделать это блестящим.

+0

Это специально взаимодействует с дисплеем и добавляет еще один слой поверх него, не так ли? Это не изменение самого сюжета? – TheComeOnMan

+0

Я не знаю, что именно вы подразумеваете под «самим сюжетом». Если вы хотите что-то удалить, вам нужно перерисовать сюжет (по крайней мере, это то, во что я верю. Я не специалист по пакету сетки). – Roland

+0

Спасибо, @Roland. Я проверю, работает ли эта работа на Shiny (хотя я думаю, что это маловероятно). Если это так, то принятая галочка будет вашей. – TheComeOnMan