Revision history for TutoriumGrundlagenStatistikTreemap
Additions:
Eine Tree Map oder im Deutschen ein Kacheldiagramm dient zur Visualisierung hierarchischer Strukturen, welche hierbei durch ineinander verschachtelte Rechtecke dargestellt werden. Somit können anschaulich Größenverhältnisse dargestellt werden, indem die Fläche der Rechtecke proportional zur Größe der darzustellenden Dateneinheit gewählt wird. Um einen gewissen Kontrast herstellen zu können, gibt es die Möglichkeit die Flächen der Rechtecke in verschiedenen Farben zu gestalten.
Erstellt wird in dieser Übung eine Treemap. Als Beispiel wird der mitgelieferte Datensatz //mtcars// verwendet.
In der Benutzeroberfläche werden nun lediglich 4 Dropdown Felder benötigt. Diese legen die auszuwertenden Daten fest.
https://de.wikipedia.org/wiki/Tree_Map
Erstellt wird in dieser Übung eine Treemap. Als Beispiel wird der mitgelieferte Datensatz //mtcars// verwendet.
In der Benutzeroberfläche werden nun lediglich 4 Dropdown Felder benötigt. Diese legen die auszuwertenden Daten fest.
https://de.wikipedia.org/wiki/Tree_Map
Deletions:
Additions:
{{files download="Treemap.txt"text="Treemap als .txt"}}
Deletions:
Additions:
if(input$vs !="" '""') rV$selectedData <- rV$selectedData[rV$selectedData$vs ""=="" input$vs,]
if(input$am != ""''"") rV$selectedData <- rV$selectedData[rV$selectedData$am ""=="" input$am,]
if(input$gear != ""''"") rV$selectedData <- rV$selectedData[rV$selectedData$gear ""=="" input$gear,]
if(input$carb != ""''"") rV$selectedData <- rV$selectedData[rV$selectedData$carb ""=="" input$carb,]
if(input$am != ""''"") rV$selectedData <- rV$selectedData[rV$selectedData$am ""=="" input$am,]
if(input$gear != ""''"") rV$selectedData <- rV$selectedData[rV$selectedData$gear ""=="" input$gear,]
if(input$carb != ""''"") rV$selectedData <- rV$selectedData[rV$selectedData$carb ""=="" input$carb,]
Deletions:
if(input$am != '') rV$selectedData <- rV$selectedData[rV$selectedData$am ""=="" input$am,]
if(input$gear != '') rV$selectedData <- rV$selectedData[rV$selectedData$gear ""=="" input$gear,]
if(input$carb != '') rV$selectedData <- rV$selectedData[rV$selectedData$carb ""=="" input$carb,]
Additions:
{{image url="Treemap_1.jpg" width="400" class="right"}}
{{image url="Treemap_2.jpg" width="400" class="left"}}
{{image url="Treemap_2.jpg" width="400" class="left"}}
Deletions:
{{image url="Treemap_2.jpg" width="400" class="center"}}
{{files}}
Additions:
{{image url="Treemap_1.jpg" width="400" class="left"}}
{{image url="Treemap_2.jpg" width="400" class="center"}}
{{files}}
{{image url="Treemap_2.jpg" width="400" class="center"}}
{{files}}
Deletions:
Additions:
**Aufgabe**
Erstellt werden soll eine Treemap. Als Beispiel wird der mitgelieferte Datensatz //mtcars// verwendet.
Sobald mit der Maus über das Diagramm gefahren wird sollen die Informationen über Engine, Transmission, Number of forward gears, Number of carburators und die Variable count angezeigt werden.
**server.R**
Für die Aufgabe Treemap benötigen sie die gleichnamige Bibliothek Treemap. Bitte laden sie diese herunter bevor sie mit der Programmierung beginnen.
//
library(shiny)
library(treemap)
server <- function(input, output) {
data <- mtcars
#data$count <- ave(data$carb, data[,c('vs','am', 'gear', 'carb')], FUN=length) #kann weg
data$one <- 1
rV <- reactiveValues(
selectedData = data,
tile = data.frame()
)
output$vs <- renderUI({
selectInput(inputId = 'vs', label = 'Engine',
c(Choose = '', V_shaped = 0, straight = 1)
)
})
output$am <- renderUI({
selectInput(inputId = 'am', label = 'Transmission',
c(Choose = '', automatic = 0, manual = 1)
)
})
output$gear <- renderUI({
selectInput(inputId = 'gear', label = 'Number of forward gears',
c(Choose = '', sort(unique(data$gear)))
)
})
output$carb <- renderUI({
selectInput(inputId = 'carb', label = 'Number of carburetors',
c(Choose = '', sort(unique(data$carb)))
)
})
output$treemap <- renderPlot({
p <- treemap(rV$selectedData,
index = c('vs', 'am', 'gear', 'carb'),
vSize = 'one',
#vSize = 'count', #kann weg
type = 'index'
)
rV$tile <- p$tm[, c('vs', 'am', 'gear', 'carb', 'vSize', 'x0', 'y0', 'w', 'h')]
p
})
observeEvent(c(input$vs, input$am, input$gear, input$carb), {
rV$selectedData <- data
if(input$vs != '') rV$selectedData <- rV$selectedData[rV$selectedData$vs ""=="" input$vs,]
if(input$am != '') rV$selectedData <- rV$selectedData[rV$selectedData$am ""=="" input$am,]
if(input$gear != '') rV$selectedData <- rV$selectedData[rV$selectedData$gear ""=="" input$gear,]
if(input$carb != '') rV$selectedData <- rV$selectedData[rV$selectedData$carb ""=="" input$carb,]
})
output$hoverInfo <- renderUI({
hover <- input$hover # Zwischenspeicher
if (!is.null(hover)) {
for (i in 1:nrow(rV$tile)) {
if (hover$x >= rV$tile$x0[i] && hover$x <= (rV$tile$x0[i] + rV$tile$w[i]) &&
hover$y >= rV$tile$y0[i] && hover$y <= (rV$tile$y0[i] + rV$tile$h[i])) {
style <- paste0("position:absolute; z-index:100; background-color: rgba(245, 245, 245, 0.85); ",
"left:", hover$coords_img$x + 5, "px; top:", hover$coords_img$y + 5, "px;")
return(
wellPanel(
style = style,
p(HTML(paste0("<b> Engine: </b>", rV$tile$vs[i], "<br/>",
"<b> Transmission: </b>", rV$tile$am[i], "<br/>",
"<b> Number of forward gears: </b>", rV$tile$gear[i], "<br/>",
"<b> Number of carburetors: </b>", rV$tile$carb[i], "<br/>",
"<b> Count: </b>", rV$tile$vSize[i])))
)
)
}
}
}
})
}
//
**ui.R**
//
ui <- fluidPage(
titlePanel("Demo 6_Treemap"),
fluidRow(htmlOutput('vs')),
fluidRow(htmlOutput('am')),
fluidRow(htmlOutput('gear')),
fluidRow(htmlOutput('carb')),
fluidRow(
style = "position:relative",
uiOutput("hoverInfo"),
plotOutput('treemap',
dblclick = "dblclick",
hover = hoverOpts(id = "hover", delay = 250, delayType = "throttle")))
)//
**app.R**
Die app.R bleibt hier komplett identisch.
// source('server.R', encoding = "UTF-8")
source('ui.R', encoding = "UTF-8")
shinyApp(ui = ui, server = server) //
**{{color text="Hier können Sie den Quellcode ohne Kommentare zusammengefasst herunterladen:" c="#00386a"}}**
{{files download="Treemap.txt"text="Scatterplott als .txt"}}
Erstellt werden soll eine Treemap. Als Beispiel wird der mitgelieferte Datensatz //mtcars// verwendet.
Sobald mit der Maus über das Diagramm gefahren wird sollen die Informationen über Engine, Transmission, Number of forward gears, Number of carburators und die Variable count angezeigt werden.
**server.R**
Für die Aufgabe Treemap benötigen sie die gleichnamige Bibliothek Treemap. Bitte laden sie diese herunter bevor sie mit der Programmierung beginnen.
//
library(shiny)
library(treemap)
server <- function(input, output) {
data <- mtcars
#data$count <- ave(data$carb, data[,c('vs','am', 'gear', 'carb')], FUN=length) #kann weg
data$one <- 1
rV <- reactiveValues(
selectedData = data,
tile = data.frame()
)
output$vs <- renderUI({
selectInput(inputId = 'vs', label = 'Engine',
c(Choose = '', V_shaped = 0, straight = 1)
)
})
output$am <- renderUI({
selectInput(inputId = 'am', label = 'Transmission',
c(Choose = '', automatic = 0, manual = 1)
)
})
output$gear <- renderUI({
selectInput(inputId = 'gear', label = 'Number of forward gears',
c(Choose = '', sort(unique(data$gear)))
)
})
output$carb <- renderUI({
selectInput(inputId = 'carb', label = 'Number of carburetors',
c(Choose = '', sort(unique(data$carb)))
)
})
output$treemap <- renderPlot({
p <- treemap(rV$selectedData,
index = c('vs', 'am', 'gear', 'carb'),
vSize = 'one',
#vSize = 'count', #kann weg
type = 'index'
)
rV$tile <- p$tm[, c('vs', 'am', 'gear', 'carb', 'vSize', 'x0', 'y0', 'w', 'h')]
p
})
observeEvent(c(input$vs, input$am, input$gear, input$carb), {
rV$selectedData <- data
if(input$vs != '') rV$selectedData <- rV$selectedData[rV$selectedData$vs ""=="" input$vs,]
if(input$am != '') rV$selectedData <- rV$selectedData[rV$selectedData$am ""=="" input$am,]
if(input$gear != '') rV$selectedData <- rV$selectedData[rV$selectedData$gear ""=="" input$gear,]
if(input$carb != '') rV$selectedData <- rV$selectedData[rV$selectedData$carb ""=="" input$carb,]
})
output$hoverInfo <- renderUI({
hover <- input$hover # Zwischenspeicher
if (!is.null(hover)) {
for (i in 1:nrow(rV$tile)) {
if (hover$x >= rV$tile$x0[i] && hover$x <= (rV$tile$x0[i] + rV$tile$w[i]) &&
hover$y >= rV$tile$y0[i] && hover$y <= (rV$tile$y0[i] + rV$tile$h[i])) {
style <- paste0("position:absolute; z-index:100; background-color: rgba(245, 245, 245, 0.85); ",
"left:", hover$coords_img$x + 5, "px; top:", hover$coords_img$y + 5, "px;")
return(
wellPanel(
style = style,
p(HTML(paste0("<b> Engine: </b>", rV$tile$vs[i], "<br/>",
"<b> Transmission: </b>", rV$tile$am[i], "<br/>",
"<b> Number of forward gears: </b>", rV$tile$gear[i], "<br/>",
"<b> Number of carburetors: </b>", rV$tile$carb[i], "<br/>",
"<b> Count: </b>", rV$tile$vSize[i])))
)
)
}
}
}
})
}
//
**ui.R**
//
ui <- fluidPage(
titlePanel("Demo 6_Treemap"),
fluidRow(htmlOutput('vs')),
fluidRow(htmlOutput('am')),
fluidRow(htmlOutput('gear')),
fluidRow(htmlOutput('carb')),
fluidRow(
style = "position:relative",
uiOutput("hoverInfo"),
plotOutput('treemap',
dblclick = "dblclick",
hover = hoverOpts(id = "hover", delay = 250, delayType = "throttle")))
)//
**app.R**
Die app.R bleibt hier komplett identisch.
// source('server.R', encoding = "UTF-8")
source('ui.R', encoding = "UTF-8")
shinyApp(ui = ui, server = server) //
**{{color text="Hier können Sie den Quellcode ohne Kommentare zusammengefasst herunterladen:" c="#00386a"}}**
{{files download="Treemap.txt"text="Scatterplott als .txt"}}