Die documentation für Balkendiagramme in ggplot2
sagt (siehe Beispiel 3):Order of gestapelte Balken ggplot2 - Bodenprofil
Balkendiagramme automatisch gestapelt werden, wenn mehrere Balken an der gleichen Stelle angeordnet sind. Die Reihenfolge der Füllung entspricht der Legende.
Aus irgendeinem Grund funktioniert der zweite Satz nicht für mich. Hier ist ein Beispiel-Datensatz, die Bodenschichten oberhalb (Streu etc.) darstellt und unter der Erde (tatsächlicher Boden):
df <- structure(list(horizon = structure(c(5L, 3L, 4L, 2L, 1L, 5L,
3L, 4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L, 5L, 3L,
4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L), .Label = c("A", "B", "F", "H",
"L"), class = "factor"), site = structure(c(1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("A", "B", "C",
"D", "E", "F"), class = "factor"), value = c(2.75, 0.5, 0.25,
-4.125, -3.375, 3.78125, 1.375, 0.625, -10.6875, -6.34375, 4.28,
2.065, 0.68, -12.1, -10.75, 8.583333333, 4.541666667, 2.166666667,
-10.70833333, -4.25, 7.35, 4, 1.8, -13.95, -5.175, 1.933333333,
1.245833333, 0.641666667, -11.16666667, -2.291666667)), .Names = c("horizon",
"site", "value"), class = "data.frame", row.names = c(NA, -30L
))
Jetzt versuche ich, die Daten zu zeichnen, indem man zuerst die Reihenfolge der Erdschicht Ebenen Angabe (dh Horizont, von oben nach unten Boden):
require(ggplot2); require(dplyr)
df %>%
mutate(horizon = factor(horizon, levels = c("L","F","H","A","B"))) %>%
ggplot(aes(site, value)) + geom_col(aes(fill = horizon)) + labs(y = "Soil depth (cm)")
Es funktioniert für L
, F
, H
aber nicht für A
, B
(unten gr (d. h. negative Werte). Der Grund, warum es wahrscheinlich nicht funktioniert, ist, dass die gestapelten Balken von site
(für positive und negative Werte getrennt) vom größten zum kleinsten sortiert und dann in einem Ansatz von oben nach unten gestapelt werden. Ist das richtig? Wenn das der Fall ist, dann war es für meine positiven Werte ein Zufall, dass die Legende zu den gestapelten Balken passte, die ich glaube.
Was ich erreichen möchte, ist eine Stapelung der Stäbe, die der Reihenfolge (von oben nach unten) in der Legende entspricht und somit auch das Bodenprofil, wenn man es im Querschnitt betrachtet und ich weiß nicht wie sich diesem zu nähern.
Ich habe versucht das Sortierverhalten im Allgemeinen zu ändern, aber es erzeugt die gleiche Handlung wie oben:
df %>%
mutate(horizon = factor(horizon, levels = c("L","F","H","A","B"))) %>%
arrange(desc(value)) %>%
ggplot(aes(site, value)) + geom_col(aes(fill=horizon)) + labs(y = "Soil depth (cm)")
df %>%
mutate(horizon = factor(horizon, levels = c("L","F","H","A","B"))) %>%
arrange(value) %>%
ggplot(aes(site, value)) + geom_col(aes(fill=horizon)) + labs(y = "Soil depth (cm)")
ich wahrscheinlich separat positive und negative Werte sortieren müssen, dass und aufsteigend absteigt bzw.?
Was die erwartet wird, o Ausgabe? Entspricht das 'levels' Argument in' factor' der erwarteten Ausgabe? –
@AdamQuek Ja, der Pegel 'Argument' im' Faktor' soll der erwarteten Ausgabe entsprechen. – Stefan