3 Stimmen

Minimierung der Zeichengröße von ggplot-Diagrammen durch Ignorieren von Variablen der Länge Null

Ich habe einen Datenrahmen, den ich ähnlich wie in einem der Beispiele in der ggplot2-Balkenplot-Seite . Das Beispiel ist dieses:

ggplot(diamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity)

Ich stelle mir vor, dass es im Diamantendatensatz keine Diamanten mit Idealschliff und Reinheit VV21 gibt:

newdiamonds <- diamonds[diamonds$clarity != "VVS2" & diamonds$cut != 'Ideal', ]
ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity)

Wenn Sie dieses Diagramm zeichnen, ist die "ideale" Position immer noch vorhanden, obwohl kein Balken gezeichnet werden muss. Ist es möglich, das Zeichnen dieses ungenutzten Bereichs zu unterdrücken? In diesem Fall ist es nicht nützlich, aber in meinem Fall habe ich zwei Spalten mit Variablen - "Daten" und "Gruppierung". Ich möchte über "Gruppierung" facettieren und nach "Daten" anzeigen. Für Gruppen von 'Gruppierung', wo ein Mitglied von 'Daten' keinen Wert hat, möchte ich nicht, dass ggplot es zeichnet.


EDIT

In Anlehnung an die beiden Antworten suche ich nach einem Diagramm, das wie folgt aussehen würde:

ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + coord_flip() + facet_grid(clarity~.)

Jede Gruppe kann jedoch nur ein oder mehrere "ausgeschnittene" Attribute enthalten. enter image description here

4voto

jbaums Punkte 26505

Ggplot stellt alle Ebenen des Faktors dar, unabhängig davon, ob eine Ebene im Datensatz vorkommt oder nicht. Nach der Unterteilung des Datensatzes müssen Sie die nicht verwendete Faktorebene "Ideal" entfernen:

library(ggplot2)
newdiamonds <- diamonds[diamonds$clarity != "VVS2" & diamonds$cut != 'Ideal', ]
newdiamonds$cut <- newdiamonds$cut[, drop=TRUE]
ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity) +
  opts(axis.text.x=theme_text(angle=90, hjust=1))

ggplot2 drop factor levels

3voto

Justin Punkte 41677

Alternativ können Sie auch das Argument scales='free' zu Ihrem facet_grid anrufen.

ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity, scales='free')

Aber ich würde die andere Antwort wählen, er hat es einfach schneller geschrieben!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X