R:如何在ggvis应用程序中更改特定范围的绘图背景颜色 我有一个简单的闪亮的应用程序,如下所示,你可以运行它。绘图由ggvis创建,用户可以从inputSelect中选择学生姓名。在绘图中,我想更改特定分数范围内背景的颜色。例如,在每个图中,分数高于80或低于50的图背景颜色用蓝色突出显示(见附图)。我试图使用layer\u rects()在绘图上添加图层和绘制矩形,但问题是如果选择了不同的学生,x轴的值会发生变化。以前有人这样做过吗,或者有什么想法?如果我只想弹出分数范围内的分数,有可能吗?谢谢!

R:如何在ggvis应用程序中更改特定范围的绘图背景颜色 我有一个简单的闪亮的应用程序,如下所示,你可以运行它。绘图由ggvis创建,用户可以从inputSelect中选择学生姓名。在绘图中,我想更改特定分数范围内背景的颜色。例如,在每个图中,分数高于80或低于50的图背景颜色用蓝色突出显示(见附图)。我试图使用layer\u rects()在绘图上添加图层和绘制矩形,但问题是如果选择了不同的学生,x轴的值会发生变化。以前有人这样做过吗,或者有什么想法?如果我只想弹出分数范围内的分数,有可能吗?谢谢!,r,shiny,ggvis,R,Shiny,Ggvis,库(闪亮) 图书馆(ggvis) df% ggvis(x=~年,y=~得分)%>% 刻度数值(“y”,域=c(40120))%>% 层线() }) vis%>%bind_(“绘图”) } runApp(列表(ui=ui,server=server)) 要使矩形的宽度随x轴变量变化,可以使用x=~min(year)和x2=~max(year)。我不知道如何使变量依赖于当前的比例限制,这似乎是一个更好的解决方案。但是,这应该行得通。例如,下面的矩形是 layer_rects(x = ~min(yea

库(闪亮)
图书馆(ggvis)
df%
ggvis(x=~年,y=~得分)%>%
刻度数值(“y”,域=c(40120))%>%
层线()
})
vis%>%bind_(“绘图”)
}
runApp(列表(ui=ui,server=server))

要使矩形的宽度随x轴变量变化,可以使用
x=~min(year)
x2=~max(year)
。我不知道如何使变量依赖于当前的比例限制,这似乎是一个更好的解决方案。但是,这应该行得通。例如,下面的矩形是

layer_rects(x = ~min(year), x2 =~max(year),
            y = 40-3.5, y2 = 50, opacity := 0.05, fill := "blue")
它没有针对不同的限制进行矢量化(至少看起来没有),所以您可以编写一个函数来简化多个矩形。整个服务器看起来像

shinyServer(function(input,output,session){   

    dataInput = reactive({
        gg = df[which(df$Student == input$stu),]
    })

    buffer <- 3.5  # set to make the rectangle reach the scale boundaries
    rectLims <- list(lower=c(40-buffer, 80), upper=c(50, 120+buffer))
    make_rect <- function(vis, lims, buffer=buffer) {
        for (i in seq_along(lims$lower))
            vis <- layer_rects(vis, x = ~min(year), x2 =~max(year),
                        y = rectLims$lower[i], y2 = rectLims$upper[i],
                               opacity := 0.05, fill := "blue")
        vis
    }

    vis = reactive({
        data = dataInput()
        data %>%
          ggvis(x = ~year, y = ~score) %>%
          scale_numeric("y",domain = c(40,120)) %>%
          layer_points()%>%
          layer_lines() %>%
          make_rect(lims=rectLims)
    })

    vis %>% bind_shiny("plot")
})

嗨,非常感谢你!我在这里的示例数据上运行了您的代码,发现当我切换到其他学生时,颜色的不透明度发生了变化。对于第二个问题,选项1返回“new_prop.default(x,property,scale,offset,mult,env,event,:未知的prop输入:a200281.5897161024623”中的错误。选项2返回“Error:length(x)not等于1”。我试图使用函数“which”,而不是“with”,它仍然不起作用。你有什么建议吗?谢谢!嗯,我不知道蓝色的不透明度变化,这很神秘。对于第二部分,选项1对我来说似乎很好。但是选项2错了,很抱歉,我现在就更新它。谢谢!我喜欢你的想法,不过~我仍然在努力使用矩形函数。在这个例子中例如,当我选择学生c(有4个点,比学生a、b少)时,背景颜色会变浅。如果我在真实数据中运行该函数,看起来数据点多的绘图颜色会变深。如果只有一个点,则没有任何背景颜色。你有什么建议来修复它吗?非常感谢!
shinyServer(function(input,output,session){   

    dataInput = reactive({
        gg = df[which(df$Student == input$stu),]
    })

    buffer <- 3.5  # set to make the rectangle reach the scale boundaries
    rectLims <- list(lower=c(40-buffer, 80), upper=c(50, 120+buffer))
    make_rect <- function(vis, lims, buffer=buffer) {
        for (i in seq_along(lims$lower))
            vis <- layer_rects(vis, x = ~min(year), x2 =~max(year),
                        y = rectLims$lower[i], y2 = rectLims$upper[i],
                               opacity := 0.05, fill := "blue")
        vis
    }

    vis = reactive({
        data = dataInput()
        data %>%
          ggvis(x = ~year, y = ~score) %>%
          scale_numeric("y",domain = c(40,120)) %>%
          layer_points()%>%
          layer_lines() %>%
          make_rect(lims=rectLims)
    })

    vis %>% bind_shiny("plot")
})
vis = reactive({
    data = dataInput()

    ## Option 1: and use layer_points(data=inrange)
    ## inrange <- with(dataInput(), dataInput()[score >=80 | score <= 50,])

    ## Options 2, with opacity=~inrange
    inrange = +with(data, score >=80 | score <= 50)

    data %>%
      ggvis(x = ~year, y = ~score) %>%
      scale_numeric("y",domain = c(40,120)) %>%
      layer_points(opacity = ~inrange) %>%
      layer_lines() %>%
      make_rect(lims=rectLims)
})