Как добавить процент в круговую диаграмму Р.Шины - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в программировании на R и пытаюсь отобразить круговую диаграмму в блестящем приложении. Мне удалось это сделать, однако я столкнулся с проблемой при отображении процента на графике

этокод

library("shiny")
dummy1=data.matrix(malevsfemal[1:3])
rownames(dummy1) = c("Male","Female")

# Use a fluid Bootstrap layout
ui = fluidPage(    

  # Give the page a title
  titlePanel("Male Vs Female According to each program"),

  # Generate a row with a sidebar
  sidebarLayout(      

    # Define the sidebar with one input
    sidebarPanel(
      selectInput("Program", "Program:", 
                  choices=colnames(dummy1))

    ),

    # Create a spot for the barplot
    mainPanel(

      plotOutput("Plot")  
    )

  )
)
# Rely on the 'WorldPhones' dataset in the datasets
# package (which generally comes preloaded).


# Define a server for the Shiny app
server = function(input, output) {


  # Fill in the spot we created for a plot
  output$Plot <- renderPlot({
    pct <- round(as.numeric(dummy1[,input$Program])/sum(as.numeric(dummy1[,input$Program]))*100)
    lbls <- paste(labels, pct) # add percents to labels
    lbls <- paste(lbls,"%",sep="") # ad % to labels
    # Render a barplot
    pie(dummy1[,input$Program], 
            main=input$Program,
            col=rainbow(2))
    legend("topright", c("Male", "Female"), cex=0.8,fill=rainbow(length(dummy1[,input$Program])))
  })
}
shinyApp(ui = ui, server = server)

и набор данных выглядит так

mba sqlod msqbe
Male    281 79  44
Female  221 72  84

типа, матрица будет признательна за это

1 Ответ

0 голосов
/ 01 октября 2019

Вам необходимо удалить labels при первом определении lbls, а затем добавить labels = lbls в функцию pie. Вот полное решение (однако dummy1 теперь является data.frame, но вы можете легко изменить его с помощью функции as.matrix):

library("shiny")

dummy1 <- data.frame("mba" = c(281, 221), "sqlod" = c(79,  72), "msqbe" = c(44, 84))
dummy1 <- as.data.frame.matrix(dummy1)
rownames(dummy1) <- c("Male","Female")

# Use a fluid Bootstrap layout
ui = fluidPage(    

  # Give the page a title
  titlePanel("Male Vs Female According to each program"),

  # Generate a row with a sidebar
  sidebarLayout(      

    # Define the sidebar with one input
    sidebarPanel(
      selectInput("Program", "Program:", 
                  choices=colnames(dummy1))

    ),

    # Create a spot for the barplot
    mainPanel(

      plotOutput("Plot")  
    )

  )
)
# Rely on the 'WorldPhones' dataset in the datasets
# package (which generally comes preloaded).


# Define a server for the Shiny app
server = function(input, output) {


  # Fill in the spot we created for a plot
  output$Plot <- renderPlot({
    pct <- round(as.numeric(dummy1[,input$Program])/sum(as.numeric(dummy1[,input$Program]))*100)
    lbls <- paste(pct) # add percents to labels
    lbls <- paste(lbls,"%",sep="") # ad % to labels
    # Render a barplot
    pie(dummy1[,input$Program], 
        main=input$Program,
        col=rainbow(2),
        labels = lbls)
    legend("topright", c("Male", "Female"), cex=0.8,fill=rainbow(length(dummy1[,input$Program])))
  })
}
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...