ggplot2: Füllfarbenverhalten von geom_ribbon

8

Ich versuche, Bänder in ggplot2 zu färben. Wenn ich geom_ribbon verwende, kann ich ymin und ymax und eine Füllfarbe angeben. Was es jetzt tut, ist das Färben von allem, was zwischen ymin und ymax liegt, ohne Rücksicht auf die obere Grenze oder untere Grenze.

Beispiel (aus dem Internet geändert):

%Vor%

führt zu dieser Tabelle:

Ich möchte den Bereich mit (ymin & gt; ymax) mit einer anderen Farbe als (ymin & lt; ymax) füllen. In meinen realen Daten habe ich Werte exportieren und importieren. Dort möchte ich den Bereich färben, in dem der Export höher ist als der Import grün, wo der Import größer als der Export ist. Ich möchte, dass das Farbband rot ist.

Alternativ: Ich möchte, dass geom_ribbon nur den Bereich ausfüllt, in dem ymax & gt; ymin.

Weiß jemand, wie das gemacht wird?

Danke für Ihre Hilfe.

    
ManuK 17.05.2016, 13:34
quelle

3 Antworten

7

Eine Option, bei der nicht manuell eine andere Spalte erstellt werden muss, wäre die Logik in aes(fill = self;

%Vor%

Oder wenn Sie nur basierend auf dieser Bedingung füllen möchten,

%Vor%

Ich nehme an, der Mangel an interpolierter Füllung scheint etwas mit der ggplot2 Version zu tun zu haben, da ich dasselbe mit dem Code von @ rote Beete

erhalte %Vor%

Ich bekomme @ ManuKs Bildausgabe, wenn ich diesen Code ohne Logik in aes(fill = ausführe.

    
Jonathan Carroll 22.06.2016, 05:14
quelle
5

Sie können den Daten, die Sie zum Festlegen der Füllfarbe verwenden können, eine Gruppierungsvariable hinzufügen. Das Problem ist jedoch der Punkt, an dem sich die beiden Linien schneiden, da sie in beiden Gruppen enthalten sein müssen, um Lücken zu vermeiden.

Finde also zuerst diese Zeile ..

%Vor%

Und fügen Sie es den Daten noch einmal hinzu:

%Vor%

Fügen Sie dann eine ID-Spalte basierend auf dem Zeilenindex hinzu und legen Sie die Gruppen basierend auf der Zeilennummer des Jahres 1924 fest:

%Vor%

    
beetroot 17.05.2016 14:19
quelle
1

Um das Problem zu umgehen, das ich mit nicht interpoliertem% ​​co_de% hatte, können Sie zwei (oder fill ) Bänder verwenden

%Vor%

Jede Bedingung, die Sie in n verwenden, wird es zu einem Faktor zwingen, so dass es nur dort zu gelten scheint, wo die Daten tatsächlich sind. Ich denke nicht, dass dies ein aes(fill = Bug ist, ich denke das ist ein erwartetes Verhalten.

    
Jonathan Carroll 22.06.2016 23:21
quelle

Tags und Links