Sto provando a colorare i nastri in ggplot2. Quando utilizzo geom_ribbon, sono in grado di specificare ymin e ymax e un colore di riempimento. Quello che ora fa è colorare tutto ciò che è tra ymin e ymax senza riguardo al limite superiore o al limite inferiore.ggplot2: comportamento del colore di riempimento di geom_ribbon
Esempio (modificato da Internet):
library("ggplot2")
# Generate data (level2 == level1)
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron), level2 = as.vector(LakeHuron))
# Change Level2
huron[1:50,2] <- huron[1:50,2]+100
huron[50:90,2] <- huron[50:90,2]-100
h <- ggplot(huron, aes(year))
h +
geom_ribbon(aes(ymin = level, ymax = level2), fill = "grey80") +
geom_line(aes(y = level)) + geom_line(aes(y=level2))
si tradurrà in questo grafico:
mi piacerebbe riempire l'area, dove (ymin> ymax), con un colore diverso di dove (ymin < ymax). Nei miei dati reali ho esportato e importato valori. Lì, vorrei colorare l'area in cui l'esportazione è più alta del verde importato, dove l'importazione è più grande dell'esportazione. Voglio che il nastro sia rosso.
Alternativa: vorrei che geom_ribbon riempisse solo l'area, dove ymax> ymin.
Qualcuno sa come è fatto?
Grazie per il vostro aiuto.
Wow, è fantastico, grazie mille! È esattamente quello che volevo, in quanto posso sostanzialmente mettere una condizione in "fill =". Comunque lascerò aperta la richiesta di modifica perché non è perfetta: il riempimento non può essere applicato perfettamente al punto di intersezione. (Questa volta nessun problema per me) Inoltre, penso ancora che la logica di riempimento in ggplot2 debba essere cambiata. – ManuK
Super utile! C'è un modo per ottenere lo stesso risultato con i dati nel formato lungo? Ad esempio, con i dati impostati come: Anno, Livello (1 o 2), Valore. Posso arrivare fino a: h + geom_line (aes (y = Value, group = Level) ma non riesco a capire come aggiungere nel layer geom_ribbon() con questa struttura. –
Non facilmente, non credo . 'ggplot2' si aspetta colonne, quindi devi avere una colonna da usare come i valori' ymin' e 'ymax'.È abbastanza semplice per' tidyr :: spread() 'i tuoi dati lunghi nel formato richiesto però. –