Mit this dataset, habe ich diese Grafik:ggplot2 in R: Verwenden Sie `geom_ribbon` für die Beschattung unter zwei verschiedenen` geom_smooth` Linien
ich Schatten wollen unter den geom_smooth
Linien, etwa so:
ich möchte Punkte nur unter der blauen Linie oder nur unter der rosa Linie jene Farben haben, und alles, was unter den beiden Linien dunkelgrau sein.
ich diesen Code verwendet, um die Grafik zu erstellen:
p3 <- ggplot(df, aes(x = SECONDS, y = AGE, color = GENDER)) +
geom_point() + theme_fivethirtyeight_mod() + ggtitle('Seconds vs. Age') +
geom_hline(yintercept = 0, size = 1.2, colour = "#535353") +
geom_vline(xintercept = 0, size = 1.2, colour = "#535353") +
geom_smooth(se = F) +
geom_ribbon(aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1)
Der Code für theme_fivethirtyeight_mod()
ist dies:
require(ggplot2)
require(ggthemes)
require(ggrepel)
require(grid)
require(gtable)
theme_fivethirtyeight_mod <- function (base_size = 12, base_family = "sans") {
(theme_foundation(base_size = base_size, base_family = base_family) +
theme(line = element_line(colour = "black"),
rect = element_rect(fill = ggthemes_data$fivethirtyeight["ltgray"], linetype = 0, colour = NA),
text = element_text(colour = ggthemes_data$fivethirtyeight["dkgray"]),
axis.text = element_text(size = 11, colour = ggthemes_data$fivethirtyeight["dkgray"], face = "bold"),
axis.ticks = element_blank(),
axis.line = element_blank(),
axis.title = element_text(size = 11, colour = ggthemes_data$fivethirtyeight["dkgray"], face = "bold", vjust = 1.5),
legend.title = element_blank(),
legend.background = element_rect(fill="gray90", size=.5, linetype="dotted"),
legend.position = "bottom",
legend.direction = "horizontal",
legend.box = "vertical",
panel.grid = element_line(colour = NULL),
panel.grid.major = element_line(colour = ggthemes_data$fivethirtyeight["medgray"]),
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.05, size = rel(1.5), face = "bold"),
plot.margin = unit(c(1, 1, 1, 1), "lines"),
panel.background = element_rect(fill = "#F0F0F0"),
plot.background = element_rect(fill = "#F0F0F0"),
panel.border = element_rect(colour = "#F0F0F0"),
strip.background = element_rect()))
}
Vielen Dank für die Hilfe!
EDIT:
@MLavoie kommentierte einen Link zu einer Frage, die mir eine grundlegende Vorstellung davon, wie man Schatten unter den geom_smooth
Linien gab durch ein predict(loess(AGE ~ SECONDS))
verwenden. predict()
funktioniert wie geom_smooth
und loess
ist die Methode, die verwendet wird, wenn n < 1000
. Dies ermöglichte mir, unter den männlichen und weiblichen Linien Schatten, aber erlaubte mir nicht, die Fläche unter beiden Kurven zu finden. Der dunkelgrau schattierte Bereich ist der Bereich unter dem geom_smooth
für den gesamten Datensatz.
Ich vermute, dass, um den Bereich unter den männlichen und weiblichen Kurven zu finden, ich zuerst die Daten von der geom_smooth
s (männlich und weiblich) erfassen müsste. Ich würde dann eine data.frame
mit den x-Werten als Zeilen und einer Spalte für jeden Satz von y-Werten erstellen. Ich würde den minimalen y-Wert für jeden x-Wert finden und ich würde das dunkelgrau unter dieser Kurve schattieren.
Interessanterweise sind die schattierten Bereiche wie die Punkte hellblau umrandet und die Legende zeigt rot oder blau umrandete Kästchen, die mit einer dunkelgrauen Farbe gefüllt sind. Ich habe diese auf den Code anstelle des ursprünglichen geom_ribbon
:
geom_ribbon(data = df[df$GENDER == 'F',], aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1, fill = "red") +
geom_ribbon(data = df[df$GENDER == 'M',], aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1, fill = "blue") +
geom_ribbon(aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1)
, dass der einzige neue Code bei der Erstellung dieser Graph beteiligt war:
Im Grunde möchte ich die blauen Umrisse entfernen von den gefüllten Bereichen und ich möchte die dunkelgraue Füllung aus den Boxen in der Legende entfernen, und wenn jemand herausfinden kann, wie ich den Bereich unter beiden Linien gerne beschatten würde. Danke noch einmal!
diese (http://stackoverflow.com/questions/20355849/ggplot2-shade-area-under-density-curve-by-group) könnte – MLavoie
Das einzige Problem ist, helfen, dass die Legende zeigt noch rot oder blau Boxen mit dem dunkelgrauen Inneren, wie in der Frage. Außerdem ist die Umrandung der Farbbandbereiche für alle rot. Ich werde meine Frage aktualisieren, um mich auf diese letzten Probleme zu konzentrieren, aber danke für den Link! @MLavoie –