2017-03-28 1 views
3

Ich habe ein paar Stunden zwischen geom_polygon & geom_ribbon versucht und ich kann es einfach nicht funktionieren. Ich schaue, um den Bereich zwischen den zwei Linien zu schattieren (Ich recherchierte es ziemlich viel). Sehen Sie, beide Achsen des Graphen sind numerisch und die zwei Linien teilen die gleiche Y-Achse, deshalb kann ich es nicht zur Berechnung von ymin noch bekommen ymax. Irgendwelche Ideen Jungs? Ich würde es sehr schätzen. Hier ist mein Code:Wie schattiere ich zwischen Zeilen mit identischen "y" s?

ggplot(npsmelt,aes(Score,Unresolved)) + 
    geom_line(aes(linetype=Metric, color=Metric)) + 
    theme(legend.position="top", legend.title = element_blank()) + 
    geom_point(aes(color=Metric)) + 
    theme(plot.caption=element_text(size=8, margin=margin(t=10))) + 
    scale_x_continuous(breaks=seq(54,70,1)) + 

    geom_ribbon(data=subset(npsmelt, 
     Score[Metric=="Old.NPS"]<Score[Metric=="New.NPS"]), 
     aes(ymin =0, ymax =..y..), alpha=0.10) 

Das resultierende Diagramm: enter image description here

Meine Daten:

Unresolved Metric Score 
    5 New.NPS 66.48 
    6 New.NPS 65.32 
    7 New.NPS 64.16 
    8 New.NPS 63 
    9 New.NPS 61.84 
    10 New.NPS 60.68 
    5 Old.NPS 68.5 
    6 Old.NPS 62.28 
    7 Old.NPS 61.74 
    8 Old.NPS 61.41 
    9 Old.NPS 61.67 
    10 Old.NPS 60.42 

dput:

structure(list(Unresolved = c(5L, 6L, 7L, 8L, 9L, 10L, 5L, 6L, 
7L, 8L, 9L, 10L), Metric = c("New.NPS", "New.NPS", "New.NPS", 
"New.NPS", "New.NPS", "New.NPS", "Old.NPS", "Old.NPS", "Old.NPS", 
"Old.NPS", "Old.NPS", "Old.NPS"), Score = c(66.48, 65.32, 64.16, 
63, 61.84, 60.68, 68.5, 62.28, 61.74, 61.41, 61.67, 60.42)), .Names = c("Unresolved", 
"Metric", "Score"), row.names = c(NA, -12L), class = "data.frame") 
+0

könnten Sie bitte 'dput()' Ihre Daten? –

Antwort

6

Dies scheint mir eine der seltenen Gelegenheiten, Wann ist es besser, den Datensatz in einem "Wide" zu haben? Format.

Ich verwende das lange Format für geom_line und geom_point, dann wechseln Sie zu einem breiten Format für die geom_ribbon.

library(ggplot2) 
library(tidyr) 

ggplot(df, aes(Unresolved, Score, group = Metric, color = Metric)) + 
    geom_line() + 
    geom_point() + 
    geom_ribbon(data = spread(df, Metric, Score), 
       aes(x = Unresolved, ymin = New.NPS, ymax = Old.NPS), 
       alpha = .2, 
       inherit.aes = FALSE) 

enter image description here

Notiere die inherit.aes = FALSE, es ist notwendig, weil sonst geom_ribbon wird versuchen, die Score Spalte zu verwenden, die auf y abgebildet wird.

Daten:

df <- structure(list(Unresolved = c(5L, 6L, 7L, 8L, 9L, 10L, 5L, 6L, 
7L, 8L, 9L, 10L), Metric = c("New.NPS", "New.NPS", "New.NPS", 
"New.NPS", "New.NPS", "New.NPS", "Old.NPS", "Old.NPS", "Old.NPS", 
"Old.NPS", "Old.NPS", "Old.NPS"), Score = c(66.48, 65.32, 64.16, 
63, 61.84, 60.68, 68.5, 62.28, 61.74, 61.41, 61.67, 60.42)), .Names = c("Unresolved", 
"Metric", "Score"), row.names = c(NA, -12L), class = "data.frame") 
+0

Vielen Dank, nicht nur, weil Sie mein Problem gelöst haben, sondern um Ihr Wissen über bestimmte Teile des Codes zu teilen. Ich habe etwas sehr Wichtiges gelernt. – Will

Verwandte Themen