Radar-/Spinnennetzkarten


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) 

Radardiagramm zum Vergleich männlicher und weiblicher Symptome.

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)
Parkinson-Dashboard mit Vergleichstabelle für Geschlecht und Zeit.

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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


de_DEGerman