R svgPanZoom自定义大小并添加定位器

我目前正在使用惊人的软件包svgPanZoom开发一个Shiny应用程序,我有两个问题仍然没有解决我:

(1)是否可以动态定制图形的大小.我尝试按照代码执行此操作(如https://stackoverflow.com/questions/33522860/svgplot-error-in-shiny中所示):

library(shiny)
library(svglite)
library(svgPanZoom)
library(ggplot2)
library(plyr)

data.df <- data.frame(Plant = c("Plant1", "Plant1", "Plant1", "Plant2", "Plant2", 
                                "Plant2"), Type = c(1, 2, 3, 1, 2, 3), Axis1 = c(0.2, -0.4, 0.8, -0.2, -0.7, 
                                                                                 0.1), Axis2 = c(0.5, 0.3, -0.1, -0.3, -0.1, -0.8))

ui <- shinyUI(bootstrapPage(

  svgPanZoomOutput(outputId = "main_plot")

))

server = shinyServer(function(input, output) {
  output$main_plot <- renderSvgPanZoom({
    p <- ggplot(data.df, aes(x = Axis1, y = Axis2, shape = Plant, color = Type)) + geom_point(size = 5)
    svgPanZoom(p, controlIconsEnabled = T, width = 10, height = 16)
  })
})

runApp(list(ui=ui,server=server))

但什么都没发生:(你有什么想法吗?

(2)您是否知道是否可以在此代码中包含定位器(如PlotOutput中)

主要思想是在正交系统中绘制(细胞)图片,并且用户点击图片以定位细胞的细胞核.有时单元格上的单元格非常小,因此用户可能需要缩放(这就是我使用svgPanZoom的原因).因此,即使用户使用变焦,我想得到的X和Y也是整个正交系统中的X和Y.

我看了一眼Cursor location after zoom using svg-pan-zoom,但似乎不是来自R

非常感谢你的想法!

祝周日愉快!

最佳答案 关于1):

你的链接不再起作用了.但也许令人惊讶的shinejqui包对你感兴趣.

您可以在ui中添加jqui_resizabled()函数.在您的示例中,它将是:jqui_resizabled(svgPanZoomOutput(outputId =“main_plot”)).您会在输出的左下角找到一个小灰色符号.

在这里查看一个小的gif示例(section:resizable)和其他有趣的函数:https://github.com/Yang-Tang/shinyjqui.

完整代码如下:

library(shiny)
library(svglite)
library(svgPanZoom)
library(ggplot2)
library(plyr)
library(shinyjqui)

data.df <- data.frame(Plant = c("Plant1", "Plant1", "Plant1", "Plant2", "Plant2", 
                                "Plant2"), Type = c(1, 2, 3, 1, 2, 3), Axis1 = c(0.2, -0.4, 0.8, -0.2, -0.7, 
                                                                                 0.1), Axis2 = c(0.5, 0.3, -0.1, -0.3, -0.1, -0.8))

ui <- shinyUI(bootstrapPage(

  jqui_resizabled(svgPanZoomOutput(outputId = "main_plot"))

))

server = shinyServer(function(input, output) {
  output$main_plot <- renderSvgPanZoom({
    p <- ggplot(data.df, aes(x = Axis1, y = Axis2, shape = Plant, color = Type)) + geom_point(size = 5)
    svgPanZoom(p, controlIconsEnabled = T, width = 10, height = 16)
  })
})

runApp(list(ui=ui,server=server))

对于2)我不确定.可以尝试添加一个点击监听器,但这将是一个相当丑陋的工作.也许smd别知道更好的方法.

点赞