Gestapeltes Barplot mit Frequenzzählungen ggplot2

Oct 01 2020

Ich habe einen Datensatz, in dem ich mehrere Bedingungen habe, und ich möchte ein gestapeltes Balkendiagramm erstellen, das die Häufigkeit von Fehlern zeigt, die in jeder Bedingung auftreten. (also die Anzahl der Fälle in jeder Bedingung, in denen 1 Fehler aufgetreten ist, 2 Fehler aufgetreten sind 3 Fehler aufgetreten sind ... usw. usw.)

Theoretisch verstehe ich das Prinzip der Erstellung von Balkendiagrammen mit ggplot2. Das Problem, das ich habe, ist jedoch, dass die 'Frequenz'-Zählung keine tatsächliche Variable im Datenrahmen ist (da die Anzahl der Fälle gezählt werden muss). Ich bin nicht sicher, wie ich es dem gpplot2-Framework hinzufügen soll (möglicherweise mithilfe der Funktion 'stat', aber ich bin mir nicht sicher, wie dies funktioniert).

Ich habe die folgenden ähnlichen Fragen geprüft:

Wie kann man Frequenzen mit ggplot2 barplotten?

R gestapeltes% Frequenzhistogramm mit Prozentsatz der aggregierten Daten basierend auf

Zeigen Sie die Häufigkeit an, anstatt mit geom_bar () in ggplot zu zählen

So beschriften Sie gestapelte Histogramme in ggplot

Aber keiner von ihnen liefert wirklich die Antwort, nach der ich suche (dh wie man die Anzahl der Fälle für jeden 'Fehler' zählt und diese in den ggplot2-Code einfügt.

Nachfolgend einige meiner Versuche mit Beispieldaten

library(tidyverse)

condition <- c("condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3")
number_of_errors <- c(1,2,3,3,2,1,4,4,5,4,5,1,2,2,3)

df <- data.frame(condition, number_of_errors)
df

df_melt <-melt(df) #This creates a data frame with 3 columns, 'condition', 'variable' and 'value' where 'variable' just says 'number_of_errors' for each row


# Attempt 1 - (Error: stat_bin() can only have an x or y aesthetic.)
ggplot(df_melt, aes(x=condition, y = variable, fill=value)) + 
  geom_bar(stat="bin", position="stack") +
  xlab("Condition") + 
  ylab("Frequency of Errors")


# Attempt 2 (produces a graph, but not a stacked one, just the total number of cases in each condition)
ggplot(df_melt, aes(x = condition, fill = value, label = value)) +
  geom_bar(col="black") +
  stat_count(position="stack")


# Attempt 3 (also produces a graph, but again not a stacked one - I think it is the sum of the number of errors?)
ggplot(df_melt,aes(factor(condition),y=as.numeric(value))) + 
  geom_bar(stat = "identity", position = "stack")

Ich bin mir sicher, dass mir etwas Offensichtliches fehlt, wie man Werte für die Zählungen schafft, aber ich bin mir nicht sicher, was. Jede Anleitung wird geschätzt :)

Antworten

1 ChuckP Oct 01 2020 at 15:29

Ich denke, der Schlüssel für Sie könnte darin bestehen, number_of_errorsin einen Faktor umzuwandeln und dafür zu sorgen, dass geom_bar(stat="count")Sie auch von diesem Tutorial profitieren

library(ggplot2)
df$number_of_errors <- factor(df$number_of_errors)

ggplot(df, aes(x=condition, fill = number_of_errors)) +
  geom_bar(stat="count")

2 Duck Oct 01 2020 at 15:25

Vielleicht suchen Sie nach dieser Art der Handlung. Sie müssen nach Bedingungen gruppieren und dann einen Wert zuweisen, damit die Balken entworfen werden können. Hier der Code:

library(tidyverse)
#Data
condition <- c("condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3", "condition 1", "condition 2", "condition 3")
number_of_errors <- c(1,2,3,3,2,1,4,4,5,4,5,1,2,2,3)
df <- data.frame(condition, number_of_errors)
#Code
df %>% group_by(condition) %>% mutate(Number=factor(1:n())) %>%
  ggplot(aes(x=condition,y=number_of_errors,fill=Number,group=Number))+
  geom_bar(stat = 'identity')+
  geom_text(aes(label=number_of_errors),position = position_stack(0.5))+
  theme(legend.position = 'none')

Ausgabe: