将alpha值分配给ggplot

时间:2017-08-01 04:51:56

标签: r dataframe ggplot2 shiny alpha

我有以下代码,并且它已设置为任何分配了$ time“future”的行的alpha值为0.6,任何分配的$ time“previous”的alpha都为1.这允许我的geom_bar中的值对我的“未来”数据显示略微透明,并对我的“过去”数据完全可靠。

但是我的问题是,当我的输入$ date_range在过去的两个日期之间时,我的所有geom_bars现在都是0.6的alpha(代码没有为特定的$ time值分配特定的alpha值,这是什么我想要。)

我尝试使用特定整数创建一个新的$ alpha列作为alpha值,但它只是让我的“未来”数据非常不透明,我不确定为什么......

allocated <- Project       Date      value       time
               A         2017-05-15    4         past
               B         2017-06-18    8         past
               C         2017-07-25    3         past
               D         2017-08-20    9         future
               E         2017-09-14    4         future



ui <- dashboardPage(
 dashboardSidebar(
 sidebarMenu(

  menuItem(
    dateRangeInput('date_range', label = "Date Range",format = "mm/dd/yyyy", start = Sys.Date()-17, end = Sys.Date()+17, startview = "month", weekstart = 0, separator = " to ", width = 200)
  )
)
),

fluidRow(
  box(plotOutput("plot1", width = 1000, height = 500))
)
)


server <- function(input, output) {

  output$plot1 <- renderPlot({

date_data <- reactive({
  subset(allocated, variable >= input$date_range[1] & variable <= input$date_range[2], value != 0)
})



   ggplot(data = date_data(), aes(x = variable, y = value, alpha = time, fill = Project)) +
  geom_bar(stat = 'identity') +
  scale_alpha_discrete(range = c(0.6, 1), guide = 'none')
  })
}


shinyApp(ui, server)

1 个答案:

答案 0 :(得分:2)

我很抱歉,我终于明白了。添加一个已分配的带有指定字母数字的$ alpha列,然后将scale_alpha_identity()添加到我的ggplot中,最终得到了我想要的地方!

allocated <- Project       Date      value       time      alpha
               A         2017-05-15    4         past       1
               B         2017-06-18    8         past       1
               C         2017-07-25    3         past       1
               D         2017-08-20    9         future     0.6
               E         2017-09-14    4         future     0.6



ui <- dashboardPage(
 dashboardSidebar(
 sidebarMenu(

  menuItem(
    dateRangeInput('date_range', label = "Date Range",format = "mm/dd/yyyy", start = Sys.Date()-17, end = Sys.Date()+17, startview = "month", weekstart = 0, separator = " to ", width = 200)
 )
)
),

fluidRow(
  box(plotOutput("plot1", width = 1000, height = 500))
)
)


server <- function(input, output) {

  output$plot1 <- renderPlot({

date_data <- reactive({
  subset(allocated, variable >= input$date_range[1] & variable <= 
input$date_range[2], value != 0)
})



   ggplot(data = date_data(), aes(x = variable, y = value, alpha = alpha, fill = Project)) +
  geom_bar(stat = 'identity') +
  scale_alpha_identity()
  })
}


shinyApp(ui, server)