2016-10-02 40 views
4

我目前工作的一個閃亮的應用與驚人的包svgPanZoom,我有這仍然沒有解決,我兩個問題:[R svgPanZoom自定義大小,並添加定位

(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和dŸ我想獲得那些在整個orthonormed系統,即使用戶使用

我在Cursor location after zoom using svg-pan-zoom當時一看變焦,但它似乎不是來自R

非常感謝您對您的想法!

祝你有個愉快的星期天晚上!

+0

有趣的問題。我必須做出這樣的觀察,即將您的代碼放在未解決問題的代碼上,但可能並不適用。關於你的第二個問題,我很確定我知道你的意思,但是你能澄清單詞「locator」的確切定義嗎?你的意思是鼠標指針的X,Y座標?所以如果有人點擊縮放按鈕,它將是縮放按鈕的位置(而不是可見圖像的中心,這大概是他們正在看的地方)? –

+0

嗨哈克!謝謝您的回答。對於第一個問題,我選擇一個正確運行的腳本。問題是,即使我改變寬度和高度參數,圖形也具有相同的維度:S然而,當我查看文檔時,似乎該函數被正確寫入,不是嗎? (來自包的幫助) svgPanZoom(svglite ::: inlineSVG(show(m)#將不得不手動調整svg設備的大小,height = 10,width = 16)) –

+0

對於第二點,我編輯我的後來在我的問題描述中更加清晰,我真的希望現在它更容易理解...... :) –

回答

2

關於1):再 您的鏈接不起作用。但也許令人驚訝的shinyjqui包是你感興趣的。 您可以在您的UI中添加jqui_resizabled()函數。在你的例子中,它將是:jqui_resizabled(svgPanZoomOutput(outputId = "main_plot"))。您會在輸出的左下角找到一個灰色的小符號。

查看一個小的gif示例(小節:可調整大小)以及其他有趣的功能: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)我不確定。可以嘗試添加一個點擊監聽器,但這將是一個相當醜陋的工作。也許其他人知道更好的方法。

+0

這個包似乎很有趣,但是,ggplot的問題依然如此。我開始賞金以實現一種方式來填充svgPanZoomOutput的整個寬度,因爲改變寬度和高度根本不影響劇情。 –