微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使 Shiny 的刷点与 ggplot 和伪日志/log1p 缩放数据一起使用

如何解决使 Shiny 的刷点与 ggplot 和伪日志/log1p 缩放数据一起使用

问题

嗨,我正在尝试在闪亮/闪亮的仪表板中创建一个仪表板,它可以制作各种变量组合的点图。其中一些有异常值,所以我想提供进行日志缩放的选项。但是,某些值也可以为零,因此对数缩放会创建无限值。为了解决这个问题,我可以使用伪对数或 log1p 缩放,但是这会改变图形中的中断并使其不再使用 BrushPoints 函数来选择数据点。

你可以用这个小例子试试:

library(shiny)
library(ggplot2)

# transform <- "log10"        # Works,but creates infinite points
transform <- "pseudo_log"   # Different breaks,brushedPoints no longer works

# Create some data with zeros
x_data <- runif(200,min = 1,max = 10)^2
y_data <- runif(200,max = 10)^2
    
x_data[1:20] = 0
y_data[15:34] = 0
    
df <- data.frame(x_data,y_data)


ui <- basicPage(
  plotOutput("plot1",brush = "plot_brush"),verbatimtextoutput("info")
)

server <- function(input,output) {
  output$plot1 <- renderPlot({
    ggplot(df,aes(x=x_data,y=y_data)) +
      geom_point() +
      scale_x_continuous(trans=transform) + 
      scale_y_continuous(trans=transform)
  })
  
  output$info <- renderPrint({
    brushedPoints(df,input$plot_brush,xvar = "x_data",yvar = "y_data")
  })
}

shinyApp(ui,server)

您可以在此处查看两个图的差异:

log10 plot

pseudo log plot

log10 绘图具有等距间隔(我想要的)并与 BrushedPoints() 函数一起使用,但包括边缘零值的无限点。伪日志图很好地处理零值,但也使中断对数间隔,并且(可能因此?)不适用于 BrushedPoints()。

有人可以帮助我获得 BrushedPoints 工作的 log10 样式图,其中还包括零值吗?

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。