根据缩放比例在交互式绘图上重新缩放 y 轴
Rescaling of y axis on an interactive plot depending on zoom
我在 rshiny 上有一个交互式绘图,我希望轴根据用户缩放的位置动态缩放。我想我可以使用 scale_y_continuous
来使用 ylim 的动态元素,但是我需要知道用户当前帧的下限和上限 y 值(已缩放)。有没有办法用 ggplot/rshiny 来实现这个?
require(shiny)
library(dplyr)
library(ggplot2)
ui <- fluidPage(
titlePanel(title=h4("example", align="center")),
mainPanel(plotlyOutput("plot"))
)
##server
server <- function(input,output){
dat<-reactive({
num<-c(1,2,3,4,5,6,7,8,9)
let<-c("A","B","C","D","E","F","G","H","I")
df<-data.frame(num,let)
df
})
output$plot<-renderPlotly({
gg <- ggplot(dat(),aes(x=let,y=num))+geom_point(aes(colour='red'))
gg2 <- ggplotly(gg) %>% layout(dragmode="select")
gg2
})
}
shinyApp(ui = ui, server = server)
试试这个。它不使用 plotly,但相同的一般想法。本质上它将数据过滤到画笔。双击将 return 全开。
require(shiny)
library(dplyr)
library(ggplot2)
ui <- fluidPage(
titlePanel(title=h4("example", align="center")),
mainPanel(
plotOutput("plot", brush = brushOpts("brush_p")))
)
##server
server <- function(input,output){
dat<-reactive({
num<-c(1,2,3,4,5,6,7,8,9)
let<-c("A","B","C","D","E","F","G","H","I")
df<-data.frame(num,let)
df
})
dat2 <- reactive({
y_max <- input$brush_p$ymax
y_min <- input$brush_p$ymin
if(is.null(y_max)) return(dat())
dat() %>% filter(num > y_min & num < y_max)
})
output$plot<-renderPlot({
gg <- ggplot(dat2(),aes(x=let,y=num))+geom_point(aes(colour='red'))
gg
})
}
shinyApp(ui = ui, server = server)
由 reprex 创建于 2018-08-19
包 (v0.2.0).
我在 rshiny 上有一个交互式绘图,我希望轴根据用户缩放的位置动态缩放。我想我可以使用 scale_y_continuous
来使用 ylim 的动态元素,但是我需要知道用户当前帧的下限和上限 y 值(已缩放)。有没有办法用 ggplot/rshiny 来实现这个?
require(shiny)
library(dplyr)
library(ggplot2)
ui <- fluidPage(
titlePanel(title=h4("example", align="center")),
mainPanel(plotlyOutput("plot"))
)
##server
server <- function(input,output){
dat<-reactive({
num<-c(1,2,3,4,5,6,7,8,9)
let<-c("A","B","C","D","E","F","G","H","I")
df<-data.frame(num,let)
df
})
output$plot<-renderPlotly({
gg <- ggplot(dat(),aes(x=let,y=num))+geom_point(aes(colour='red'))
gg2 <- ggplotly(gg) %>% layout(dragmode="select")
gg2
})
}
shinyApp(ui = ui, server = server)
试试这个。它不使用 plotly,但相同的一般想法。本质上它将数据过滤到画笔。双击将 return 全开。
require(shiny)
library(dplyr)
library(ggplot2)
ui <- fluidPage(
titlePanel(title=h4("example", align="center")),
mainPanel(
plotOutput("plot", brush = brushOpts("brush_p")))
)
##server
server <- function(input,output){
dat<-reactive({
num<-c(1,2,3,4,5,6,7,8,9)
let<-c("A","B","C","D","E","F","G","H","I")
df<-data.frame(num,let)
df
})
dat2 <- reactive({
y_max <- input$brush_p$ymax
y_min <- input$brush_p$ymin
if(is.null(y_max)) return(dat())
dat() %>% filter(num > y_min & num < y_max)
})
output$plot<-renderPlot({
gg <- ggplot(dat2(),aes(x=let,y=num))+geom_point(aes(colour='red'))
gg
})
}
shinyApp(ui = ui, server = server)
由 reprex 创建于 2018-08-19 包 (v0.2.0).