Steuern Sie die Spaltenbreiten in einem ggplot2-Diagramm mit einer Reihe und inkonsistenten Daten.

In den künstlichen Daten, die ich unten für die MWE erstellt habe, habe ich versucht, das Wesentliche eines Skripts zu demonstrieren, das ich in R erstellt habe. Es darf kein "Nein" -Wert für die Vervollständigung der Serie angegeben werden.

Mir wurde gesagt, dass, wenn ich diese letzte Spalte nicht machen kann, die leider nicht so dünn wie die Spalten ist, in denen ich in der Grafik nicht erlaubt bin, diese Grafiken. Dies ist leider ein Problem, da das von mir geschriebene Skript Hunderte von Diagrammen gleichzeitig erstellt, einschließlich Statistiken, Signifikanzindikatoren, propogierten Fehlerbalken und intelligenten Anpassungen der y-Achse (diese Funktionen sind im MWE natürlich nicht vorhanden).

Einige andere Kommentare:

Diese Ausnahmespalte befindet sich garantiert nicht am Ende des Diagramms. Manuelles Ändern, um die Reihe zum Ändern der Farbe und zum Umkehren der Reihenfolge zu zwingen und den zusätzlichen Platz auf der rechten Seite zu lassen, ist daher nicht zuverlässig.

Ich habe versucht, die Daten als Konstante 0 zu simulieren, damit die Reihe "vorhanden", aber unsichtbar ist. Wie zu erwarten, macht die Reihenfolge der Reihe c (Nein, Ja) das Überspringen eines Leerzeichens ebenfalls unannehmbar. So wurde die gleiche Frage hier beantwortet, aber leider funktioniert es mit meinen Einschränkungen nicht:Konsistente Breite für geom_bar bei fehlenden Daten undInclude space for missing factor level, das in der Füllästhetik in geom_boxplot verwendet wird

Ich habe auch versucht, dies mit Facetten zu tun, aber es traten zahlreiche Probleme auf, darunter Zeilenumbrüche und Fehler in den Anmerkungen, die ich zur x-Achse hinzufüge.

MWE:

library(ggplot2)

print("Program started")

x <- c("1","2","3","1","2","3","4")
s <- c("No","No","No","Yes","Yes","Yes","Yes")
y <- c(1,2,3,2,3,4,5)
df <- as.data.frame(cbind(x,s,y))

print(df)

gg <- ggplot(data = df, aes_string(x="x", y="y", weight="y", ymin=paste0("y"), ymax=paste0("y"), fill="s"));
dodge_str <- position_dodge(width = NULL, height = NULL);
gg <- gg + geom_bar(position=dodge_str, stat="identity", size=.3, colour = "black")

print(gg)

print("Program complete - a graph should be visible.")

Antworten auf die Frage(4)

Ihre Antwort auf die Frage