2017-01-18 4 views
0

Ich möchte Bargraph der Faktorvariablen mit Zählernummer auf der y-Achse erstellen. Außerdem möchte ich Zählbalken für alle Faktoren hinzufügen, einschließlich der fehlenden.Wie füge ich Nullen ohne Label für ungenutzte Faktoren hinzu?

Zum Beispiel generieren Code unten die Grafik, die ich brauche, aber Z-Faktor hat keine Bezeichnung (es sollte 0 sein), also möchte ich es hinzufügen. ggplot2 Version 2.2.1.9000

df <- data.frame(x = factor(c("x", "x", "x"), levels = c("x","z"))) 
ggplot(df, aes(x)) + stat_count() + 
    geom_text(stat = "count" ,aes(label = ..count..),vjust = -1) + 
    scale_x_discrete(drop = FALSE) 

Ist es möglich, dies ohne Datentransformationen zu tun?

Antwort

3

Hinweis:

library(ggplot2) 

df <- data.frame(x = factor(c("x", "x", "x"), levels = c("x","z"))) 

ggplot(df, aes(x)) + 
    stat_count() + 
    scale_x_discrete(drop = FALSE) -> gg 

Diese "berechnet" die Handlung:

gb <- ggplot_build(gg) 

Und hier ist alles, was nach der stat_count() Berechnung verfügbar ist:

gb$data[[1]] 
## y count prop x PANEL group ymin ymax xmin xmax colour fill size linetype alpha 
## 1 3  3 1 1  1  1 0 3 0.55 1.45  NA grey35 0.5  1 NA 

Sie nicht haben diese Daten sind verfügbar (Auszug aus stat_count()):

compute_group = function(self, data, scales, width = NULL) { 
    x <- data$x 
    weight <- data$weight %||% rep(1, length(x)) 
    width <- width %||% (resolution(x) * 0.9) 

    count <- as.numeric(tapply(weight, x, sum, na.rm = TRUE)) 
    count[is.na(count)] <- 0 

    data.frame(
    count = count, 
    prop = count/sum(abs(count)), 
    x = sort(unique(x)), 
    width = width 
) 
} 

Entweder schreiben Sie eine neue stat_ oder führen Sie einfach die Berechnung außerhalb der Plotting.

+0

Vielen Dank für die ausführliche Antwort! – ZsideZ

Verwandte Themen