
Radardiagramme sind noch nicht so verbreitet wie ihre anderen Schwestern und Brüder. Sie ermöglichen es, die Unterschiede zwischen den Gruppen für viele Variablen auf einmal zu zeigen. Sie funktionieren gut, wenn Sie eine Art Höchstwert für diese Variablen haben. Auch, wenn man nicht so viele Gruppen zu vergleichen hat, idealerweise 2-3. Und wenn Sie nicht an den Verteilungen selbst interessiert sind.
Dennoch sind sie optisch ansprechend und können ein schöner Teil einer dynamischen Shiny-Anwendung sein.
Nachfolgend finden Sie den einfachen Code für ein Radar-Diagramm für Daten zu Parkinson-Symptomen. Jedes Symptom wird von 0-100 bewertet. Da es sich bei den Daten um Längsschnittdaten handelt, ermöglicht die Funktion die Darstellung der Daten zu einem bestimmten Zeitpunkt. Außerdem ist eine Sortierung nach Schweregrad möglich.
Die Funktion funktioniert für binäre Gruppen.
Plot.Bin.Radar<-function(timepoint,group,order_by_severity = FALSE){
#reading Symptome data#
data.symptoms<-data.frame(ID=m.data$Teilnehmer_id,slow=m.data$slow, constipation=m.data$constipation,walk=m.data$walk,freezing=m.data$freezing, falls=m.data1TP4Stürze,Aufstehen=m.data1TP4Aufstehen,Anziehen=m.data1TP4Anziehen, Motivation=m.data$motivation,Handschrift=m.data1TP4Handschrift,
Depressionen=m.data$Depressionen,Zurückgezogen=m.data1TP4Zurückgezogen,
Angst=m.data1TP4Angst,Müdigkeit=m.data1TP4Müdigkeit,
schläfrig=m.data$schläfrig,Dyskinesie=m.data$Dyskinesie,
Tremor=m.data$tremor,Gleichgewicht=m.data1TP4Gleichgewicht,
Schwindel=m.data$schwindel,Sehstörungen=m.data$sehstörungen,Schlaflosigkeit=m.data$schlafstörungen,
rbd=m.data$rbd,restlesslegs=m.data$restlesslegs,
Muskelschmerzen=m.data$Muskelschmerzen,Sprache=m.data$Sprache,
Sabbern=m.data$Sabbern,Bücken=m.data$Bücken,
Gedächtnis=m.data$Gedächtnis,Verständnis=m.data$Verständnis,Geruch=m.data$Geruch,
sexuell=m.data$sexuell,harntreibend=m.data1TP4Harn,
Halluzinationen=m.data$halluzinationen,Übelkeit=m.data$Übelkeit,Zeit=m.data$TimeCont)
#wo-Gruppenvariable in den Daten#
where.group<-which(names(m.data)==group)
data.symptoms.0<-data.symptoms[(data.symptoms$time==timepoint)&(m.data[,where.group]==0),]
data.symptoms.12<-data.symptoms[(data.symptoms$time==timepoint)&(m.data[,where.group]==1),]
all.symptoms.0 <- data.frame(sapply(data.symptoms.0, function(x) as.numeric(as.character(x))))
alle.Symptome.12 <- data.frame(sapply(data.Symptome.12, function(x) as.numeric(as.character(x))))
av.symp.0<-colMeans(alle.symptome.0, na.rm=TRUE)
av.symp.12<-colMeans(alle.symptome.12, na.rm=TRUE)
Daten <- as.data.frame(rbind(av.symp.0[2:34],av.symp.12[2:34]))
1TP5Sortierung nach Schweregrad#
if (ordnen_nach_Schweregrad) {
# Berechnung des mittleren Schweregrads für beide Gruppen
Mittelwert_Schweregrad <- colMeans(Daten, na.rm = TRUE)
ordered_symptoms <- names(sort(mean_severity, decreasing = TRUE))
data <- data[, ordered_symptoms]
}
get.labels<-names.data$Field.Label[names.data$Variable.Field.Name==group]
rownames(data) <- c(paste0(" No ", timepoint, "m."),paste0(" Yes ",timepoint, "m."))
# Um das fmsb-Paket zu verwenden, muss ich dem Datenrahmen 2 Zeilen hinzufügen: die Maximal- und Minimalwerte jeder Variable, die im Diagramm angezeigt werden sollen!
Daten <- rbind(rep(100,33) , rep(0,33) , Daten)
# Farbvektor (Ränder und Füllung)#
colors_border=c( rgb(0.2,0.5,0.5,0.9), rgb(0.8,0.2,0.5,0.9) , rgb(0.7,0.5,0.1,0.9),rgb(0.1,0.1,0.9,0.9))
colors_in=c( rgb(0.2,0.5,0.5,0.4), rgb(0.8,0.2,0.5,0.4) , rgb(0.7,0.5,0.1,0.4),rgb(0.1,0.1,0.9,0.4) )
#-Diagramm mit Standardoptionen:
radarchart( data , axistype=1 ,
#angepasstes Polygon
pcol=colors_border , pfcol=colors_in , plwd=4 , plty=1,
#custom das Gitter
cglcol="grau", cglty=1, axislabcol="grau", caxislabels=seq(0,20,5), cglwd=0.8, vlcex=0.8,title=get.labels)
legend(x=0.8, y=1.3, legend = rownames(data[-c(1,2),]), bty = "n", pch=20 ,
col=colors_border , text.col = "black", cex=1, pt.cex=2)
if (order_by_severity) {
mtext("Symptome geordnet nach mittlerem Schweregrad über alle Gruppen",
side = 1, line = 4, cex = 0.9, col = "grey40")
}
}
Plot.Bin.Radar(0, "gender",order_by_severity = TRUE)

Als Ergebnis des Aufrufs der Funktion Plot.Bin.Radar(0, "gender",order_by_severity = TRUE) ergibt sich die oben dargestellte Grafik. Für Geschlecht, für 0 Monate (Basislinie). Stellen Sie sich nun die Shiny-App mit der Zeit als Schieberegler vor:
Bibliothek(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Parkinson Dashboard"),
dashboardSidebar(),
dashboardBody(
# Boxen müssen in eine Zeile (oder Spalte) gesetzt werden
fluidRow(
box(width = 6,plotOutput("plot1", height = 450)),
box(
title = "Grundlinie vs. anderer Zeitpunkt",
sliderInput("Schieberegler", "Zeitpunkt wählen:", 0, 24, 6)
)
)
)
)
server <- function(input, output) {
library(fmsb)
Ihre.Daten <- read.csv("meineDaten.csv")
#hier etwas Datenmanagement betreiben#
Quelle("park_functions.R")
output$plot1 <- renderPlot({
Plot.Radar(input$slider)
})
}
shinyApp(ui, server)

Dann laden Sie die App auf den Shiny Server und viola! Es spart Ihnen wie 1000 von Plots und ist wirklich Spaß zu erkunden!
Viel Glück!
