2016-05-16 15 views
5

के तत्वों को अद्यतन करने से चमकदार को रोकें, मैं वास्तव में प्रदर्शित किए गए बिंदुओं के बावजूद, मेरी साजिश स्थिरता के रंग पैमाने और आकार के पैमाने को रखने की कोशिश कर रहा हूं।साजिश के

ggplot में, मैं scale_color_gradient(limits=c(0,1)) जैसे तर्कों का उपयोग करके इन निरंतर सेट कर सकता था। हालांकि, मुझे plot_ly में समानांतर फ़ंक्शन नहीं मिल रहा है और अन्य कारणों से, मैं यहां ggplotly() का उपयोग नहीं कर सकता।

मुझे विश्वास है कि यह eventReactive() के साथ भी किया जा सकता है लेकिन मुझे इसका उपयोग करने में समझने में समस्या हो रही है।

यहां एक न्यूनतम उदाहरण है, जहां साजिश का रंग और आकार बदलता रहता है।

library(dplyr) 
library(shiny) 
library(plotly) 

df <- as.data.frame(list("UserID"=c(1,1,1,1,2,2,2,2), 
          "Category"=c('A','A','B','B','A','A','B','B'), 
          "Rate"=c(2,3,5,6,8,6,7,1), 
          "x"=c(1,3,5,7,2,4,6,8), 
          "y"=c(1,3,5,7,2,4,6,8) 
        )) 

ui <- (fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput("userInput","Select User", sort(unique(df$UserID)), 
        selected=1), 
     checkboxGroupInput("CategoryInput", "Select Category", sort(unique(df$Category)), 
         selected=c('A','B')) 
    ), 

    mainPanel(
     plotlyOutput("mainPlot")#, 
    ) 
) 
)) 

server <- function(input, output, session) { 

    # filter for both user and category 
    filteredFull <- reactive({ 
     df %>% 
     filter(
      UserID == input$userInput, 
      Category %in% input$CategoryInput 
     ) 
    }) 

    output$mainPlot <- renderPlotly({ 
     plot_ly(data=filteredFull(), x=x, y=y, 
         color=Rate, size=Rate, 
         mode='markers') 
    }) 
} 

shinyApp(ui, server) 

क्या रंग/आकार के पैमाने/सीमा को अपडेट किए बिना केवल कौन से अंक प्रदर्शित किए जा सकते हैं?

उत्तर

5

प्लॉटली में उन रंगों की सीमाएं भी हैं। वे मार्कर विशेषता के तहत घोंसला कर रहे हैं। आप स्केल निरंतर छोड़ने के लिए रंग स्केल अधिकतम और न्यूनतम मान (संख्यात्मक मान) सेट कर सकते हैं, भले ही कौन से बिंदु वास्तव में प्रदर्शित होते हैं।

मैंने marker = list(cmin = 1, cmax = 8) को plot_ly कमांड में अभी जोड़ा। इसलिए आपको अपने अधिकतम और न्यूनतम मान निर्धारित करने के लिए अपने df को स्कैन करना होगा। नीचे

कोड:

library(dplyr) 
library(shiny) 
library(plotly) 

df <- as.data.frame(list(
    "UserID" = c(1, 1, 1, 1, 2, 2, 2, 2), 
    "Category" = c('A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'), 
    "Rate" = c(2, 3, 5, 6, 8, 6, 7, 1), 
    "x" = c(1, 3, 5, 7, 2, 4, 6, 8), 
    "y" = c(1, 3, 5, 7, 2, 4, 6, 8) 
)) 

ui <- (fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput("userInput","Select User", sort(unique(df$UserID)), selected=1), 
     checkboxGroupInput("CategoryInput", "Select Category", sort(unique(df$Category)), selected=c('A','B')) 
    ), 

    mainPanel(
     plotlyOutput("mainPlot"), 
     plotlyOutput("mainPlotFixedSize") 
    ) 
) 
)) 

server <- function(input, output, session) { 

    # filter for both user and category 
    filteredFull <- reactive({ 
     df %>% 
     filter(
      UserID == input$userInput, 
      Category %in% input$CategoryInput 
     ) 
    }) 

    output$mainPlot <- renderPlotly({ 
    plot_ly(data=filteredFull(), x=x, y=y, 
     color=Rate, size=Rate, 
     mode='markers', marker = list(cmin = 1, cmax = 8)) 
    }) 

    output$mainPlotFixedSize <- renderPlotly({ 
    plot_ly(data=filteredFull(), x=x, y=y, 
     color=Rate, mode='markers', 
     marker = list(sizemode = "area", size = Rate*3400, cmin = 1, cmax = 8)) 
    }) 
} 

shinyApp(ui, server) 
+0

यह रंग पैमाने के लिए बहुत अच्छा है! धन्यवाद! आकार के बारे में क्या? मुझे प्रलेखन में कुछ भी नहीं मिला। –

+1

थोड़ा देर हो चुकी है, लेकिन मैंने आकार को शामिल करने के लिए अपना जवाब संपादित किया। आकार को नियंत्रित करना अधिक कठिन है। यह वास्तव में आसान है, लेकिन आपको हाथ से सभी आकार समायोजन करना होगा। मैंने प्रयोग करके दर कारक (न्यूनतम 3400 पीएक्स क्षेत्र) चुना है। –

+0

@Adam_G क्या आप जांच सकते हैं कि अपडेट किया गया उत्तर आपके लिए काम कर रहा है या नहीं? –

संबंधित मुद्दे