R基礎學習(三)-- 簡單練習(shiny+mysql+barplot)
阿新 • • 發佈:2018-12-26
user observe 實現 tle plot rstudio names eat lag
測試環境:win10+RStudio
提前準備:
install.packages(‘shiny‘)
install.packages(‘RMySQL‘)
數據表準備:
最終實現的界面效果如下:點擊【Click Me】按鈕,從數據庫讀出數據,並在界面畫出條形圖
正式開始!
在R項目(比如ShinyDemo)的目錄下新建一個文件夾barplotDemo
然後在這個目錄下新建兩個文件,ui.R和server.R
ui.R的代碼實現如下
library(shiny) # Use a fluid Bootstrap layout fluidPage(# Give the page a title titlePanel("A Simple Shiny Demo"), # Generate a row with a sidebar sidebarLayout( # Define the sidebar with one input sidebarPanel( actionButton("do", "Click Me") ), # Create a spot for the barplot mainPanel( plotOutput("dataPlot") ) ) )
server.R的代碼如下:
library(RMySQL) # Define a server for the Shiny app function(input, output) { observeEvent(input$do, {
# connect the database conn <- dbConnect(MySQL(), dbname = "test", username="root", password="123456",client.flag=CLIENT_MULTI_STATEMENTS) users= dbGetQuery(conn, "SELECT * FROM tb_user") dbDisconnect(conn) output$dataPlot <- renderPlot({ vAge<-as.vector(unlist(users[3])) vName<-as.vector(unlist(users[2])) height<-vAge names(height)<-vName barplot(height) }) }) }
備註:
(1)observeEvent(input$do, { }) 是按鈕監聽處理
(2)barplot的【height】要麽是向量要麽是矩陣,而users是list,所以需要進行處理,可以在Console查看數據類型
> is.vector(users) [1] FALSE > is.array(users) [1] FALSE > mode(users) [1] "list"
> vAge<-as.vector(unlist(users[3])) > mode(vAge) [1] "numeric" > vAge [1] 20 26 29 49 39 53 48
> vName<-as.vector(unlist(users[2])) > mode(vName) [1] "character" > vName [1] "Tom" "Jack" "Mary" "Merry" "Jerry" "Jucy" "Lucy"
上面兩個R文件寫好代碼之後,在Console執行,記得在文件夾名字兩側加引號
> runApp(‘barplotDemo‘)
運行成功後,可以看到效果如下:
點擊【Click Me】,可以看到條形圖
到此結束~
R基礎學習(三)-- 簡單練習(shiny+mysql+barplot)