2016-07-05 8 views
0

Hier ist das Beispieldaten:Fill-Bereich unter und zwischen bestimmten Linien mit ggplot2

ex_data <- structure(list(variable = c("Act", "Act", "Act", "Act", "Act", 
"Act", "Act", "Act", "Act", "Act", "Act", "Act", "Act", "Act", 
"Act", "Act", "Act", "Act", "Act", "Act", "Act", "Act", "Act", 
"Act", "Act", "Act", "Act", "Act", "Act", "Act", "Act", "Act", 
"Act", "Act", "Act", "Act", "Act", "Act", "Proj", "Proj", "Proj", 
"Proj", "Proj", "Proj", "Proj", "Proj", "Proj", "Proj", "Proj", 
"Proj", "Proj", "Proj", "Proj", "Proj", "Proj", "Goal", "Goal", 
"Goal", "Goal", "Goal", "Goal", "Goal", "Goal", "Goal", "Goal", 
"Goal", "Goal", "Thresh", "Thresh", "Thresh", "Thresh", "Thresh", 
"Thresh", "Thresh", "Thresh", "Thresh", "Thresh", "Thresh", "Thresh" 
), value = c(6.89658227475411, 6.89108850833475, 6.91060575775871, 
7.00129392659955, 7.1096850611615, 7.07369364373404, 7.06060119204421, 
7.21032922407943, 7.34249288006833, 7.39138104921065, 7.4318910161, 
7.5961207493889, 7.85673978348162, 7.92089086256755, 7.95756924344796, 
7.98326636757226, 8.0193147690931, 7.97898702366837, 8.08257378865854, 
8.07398725017176, 7.97609133959215, 8.09248918915805, 8.13257527841791, 
8.03078376104876, 7.88034051912236, 7.82481943232295, 7.72428815030338, 
7.55539008452296, 7.42128217313615, 7.45838229538017, 7.41767125677876, 
7.31265597647537, 7.35972091839823, 7.27265834882302, 7.15542963221048, 
7.1447264083441, 7.35752135743515, 7.59728236343906, 7.32707490147607, 
7.25109817340699, 7.20263208921773, 7.23082681383693, 7.24648885635746, 
7.3729353600057, 7.43036853995031, 7.53395376136055, 7.60535703635852, 
7.61387042389277, 7.60922305418595, 7.65197881774436, 7.63187616748886, 
7.65717987566166, 7.74016035808493, 7.79327615657051, 7.61036111666667, 
6.93055923840536, 6.98454642755329, 7.08191653567892, 7.149035614177, 
7.15703819845921, 7.15266967093479, 7.19286008867969, 7.17396359743953, 
7.19774908312196, 7.27575073659984, 7.32567958717628, 7.15373944966667, 
7.22547665280559, 7.2817611691513, 7.38327468613334, 7.45324989563134, 
7.46159301541492, 7.45703859310223, 7.49893924138947, 7.47923864413908, 
7.50403627814842, 7.58535715092323, 7.6374106334391, 7.45815389433333 
), measure = c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 
), NewDate = structure(c(1354320000, 1356998400, 1359676800, 
1362096000, 1364774400, 1367366400, 1370044800, 1372636800, 1375315200, 
1377993600, 1380585600, 1383264000, 1385856000, 1388534400, 1391212800, 
1393632000, 1396310400, 1398902400, 1401580800, 1404172800, 1406851200, 
1409529600, 1412121600, 1414800000, 1417392000, 1420070400, 1422748800, 
1425168000, 1427846400, 1430438400, 1433116800, 1435708800, 1438387200, 
1441065600, 1443657600, 1446336000, 1448928000, 1451606400, 1438387200, 
1441065600, 1443657600, 1446336000, 1448928000, 1451606400, 1454284800, 
1456790400, 1459468800, 1462060800, 1464739200, 1467331200, 1470009600, 
1472688000, 1475280000, 1477958400, 1480550400, 1451606400, 1454284800, 
1456790400, 1459468800, 1462060800, 1464739200, 1467331200, 1470009600, 
1472688000, 1475280000, 1477958400, 1480550400, 1451606400, 1454284800, 
1456790400, 1459468800, 1462060800, 1464739200, 1467331200, 1470009600, 
1472688000, 1475280000, 1477958400, 1480550400), class = c("POSIXct", 
"POSIXt"), tzone = "UTC")), .Names = c("variable", "value", "measure", 
"NewDate"), row.names = c(5052L, 5053L, 5054L, 5055L, 5056L, 
5057L, 5058L, 5059L, 5060L, 5061L, 5062L, 5063L, 5064L, 5065L, 
5066L, 5067L, 5068L, 5069L, 5070L, 5071L, 5072L, 5073L, 5074L, 
5075L, 5076L, 5077L, 5078L, 5079L, 5080L, 5081L, 5082L, 5083L, 
5084L, 5085L, 5086L, 5087L, 5088L, 5089L, 5336L, 5337L, 5338L, 
5339L, 5340L, 5341L, 5342L, 5343L, 5344L, 5345L, 5346L, 5347L, 
5348L, 5349L, 5350L, 5351L, 5352L, 5593L, 5594L, 5595L, 5596L, 
5597L, 5598L, 5599L, 5600L, 5601L, 5602L, 5603L, 5604L, 5845L, 
5846L, 5847L, 5848L, 5849L, 5850L, 5851L, 5852L, 5853L, 5854L, 
5855L, 5856L), class = "data.frame") 

ich als geom_line() Chart hier mit gesehen erstellen:

ggplot(ex_data, aes(x=NewDate, y=value, colour=variable)) + geom_line()

basic geom_line() chart

Ich würde jedoch gerne in der Lage sein, den Bereich unter der Proj (blau) Linie zu füllen, bis er die Thresh (lila) Linie, die Fläche unter dem Thre, erreicht sh Linie, bis er das Ziel (grün) Linie und alles unter der Torlinie zu y = 0.

trifft Wenn ich versuche, eine Grundflächendiagramm für alle Linien, scheint das Diagramm die y-Werte zu verzerren:

ggplot(ex_data, aes(x=NewDate, y=value)) + geom_area(aes(fill=variable)) + geom_line()

basic area chart

ich habe versucht, dieses Beispiel zu folgen hier: Filling in the area under a line graph in ggplot2: geom_area()

das Endergebnis würde eine Prognose Diagramm sehr ähnlich sein, wo die erste Zeile keine Füllung hat aber die letzten 3 Zeilen haben zwischen ihnen Füllungen:

+0

Die Serie ist nicht ausgerichtet: Wie stellen Sie sich vor, "füllen [ing] in den Bereich unter der Proj (blau) Linie, bis es die Thresh (lila) Linie" für x <2016? Vielleicht möchten Sie klarstellen, was Sie mit dem endgültigen Plot auszudrücken versuchen – arvi1000

+0

Sie haben Recht, ich glaube, ich würde nur füllen wollen, wo die Daten für die letzten 3 Gruppen überlappen. – tcash21

+1

Die beste Option ist es, geom_polygon zu verwenden, um die Konturen zu zeichnen, die Sie ausfüllen möchten. Das bedeutet, dass jeder Serie Punkte für die "untere" Grenze der Füllzone hinzugefügt werden. Es hört sich nicht so an, als ob es wirklich irgendwelche Informationen zur Handlung hinzufügt. – arvi1000

Antwort

1

Standardmäßig stapelt geom_area verschiedene Füllungen, was zu hohen y-Werten führt. Sie können dies mit der Position argument ausschalten. Dies ist wahrscheinlich näher an dem, wonach Sie suchen.

ggplot(ex_data, aes(x = NewDate, y = value, ymax = value, colour = variable, fill = variable)) + 
    geom_area(position = "identity") + 
    geom_line() 
+0

Danke, das ist viel näher, jetzt muss ich nur herausfinden, wie man Bereich nur unter bestimmten Linien füllen und die y-Bereiche für jede Gruppe begrenzen. – tcash21

Verwandte Themen