ggplot2: Entferne Leerzeichen für Wochenenden und Feiertage von X-Achsen-Daten

8

Probleme beim Plotten von Bestandsdaten in ggplot2 und mit einer x-Achse, die Lücken von Wochenenden und Feiertagen enthält. diese Post war sehr hilfreich, aber Ich stoße auf eine Vielzahl von Problemen, wenn ich versuche, geordnete Faktoren zu verwenden.

%Vor%

Die obige Grafik (ohne rote Kästchen) wird mit dem obigen Codesegment generiert. Und die folgenden Diagramme sind einige der Probleme beim Versuch, einige Lösungen. Erstens, wenn ich versuche, den Index des Datenrahmens zu verwenden, erzeuge ich ein gut aussehendes Diagramm, aber die X-Achse ist ungenau; Die Daten enden derzeit im Oktober, aber in der Handlung unten endet es im Juli:

%Vor%

Zweitens, wenn ich versuche, die rownames zu einem geordneten Faktor zu zwingen, verliere ich meine horizontalen Tick-Daten (die offen und geschlossen darstellen).

%Vor%

Das gleiche Problem beim Entfernen der horizontalen Ticks passiert, wenn ich das Paket bdscale verwende, aber die Gitterlinien sind sauberer:

%Vor%     
jonnie 01.10.2015, 17:13
quelle

5 Antworten

2

Sie müssen die Daten wahrscheinlich als diskrete Werte anstatt als fortlaufend behandeln. Dieser Ansatz mit einer etwas vereinfachten Version Ihres Codes könnte folgendermaßen aussehen:

%Vor%

AKTUALISIEREN

Aktualisierte Behandlung von Achsenbeschriftungen.

    
WaltS 01.10.2015 20:08
quelle
1

Wenn Sie bdscale dafür verwenden möchten, sagen Sie ihm, dass Sie mehr Gitternetzlinien verwenden sollten:

%Vor%

Es sollte Oktober auf die Achse dort setzen, aber es ist nicht so schlau. Womp Womp. Pull-Anfragen willkommen!

    
dvmlls 01.10.2015 20:55
quelle
1

Nun, Sie können es manuell anpassen, aber es ist irgendwie hacky. Zuerst sollten Sie den Index verwenden, damit Ihre Beobachtungen von 1 bis 188 nummeriert sind.

%Vor%

Dann ist dein eigener Handlungscode:

%Vor%

Und schließlich schaute ich in Eingabe, wo die Unterbrechungen gemacht werden sollten, und lieferte die Aufkleber manuell:

%Vor%

ANMERKUNG HIER, dass ich faul war und das nächste Datum für 1-jan, 1-apr 1-jul und 1-okt genommen habe, weil 1 jan ein Feiertag ist, steht das Label "jan" unter 2-jan. Und ich habe die Bezeichnung "oct" unterhalb von 30-sep gesetzt, den letzten Eintrag in input . Sie können dies selbstverständlich nach Ihren Wünschen anpassen.

Natürlich könnten Sie die Beschriftung automatisieren, indem Sie ein Beschriftungsfeld mit Datum hinzufügen und den Monat extrahieren.

    
RHA 01.10.2015 20:12
quelle
1

Die folgende Methode verwendet die Facettierung, um Leerzeichen zwischen fehlenden Daten zu entfernen. Anschließend wird Leerraum zwischen den Facetten entfernt, um das Aussehen einer nicht facettierten Grafik wiederherzustellen.

Zuerst erstellen wir eine Gruppierungsvariable, die sich jedes Mal erhöht, wenn eine Pause in den Daten auftritt (Code angepasst von dieser SO-Antwort ). Wir werden das später für das Facettieren verwenden.

%Vor%

Nun fügen wir Ihrem Plot den folgenden Code hinzu. facet_grid erstellt an jedem Standort, an dem aufgrund eines Wochenendes oder Feiertags eine Unterbrechung der Datumssequenz aufgetreten ist, eine neue Facette. scale_x_date fügt einmal pro Woche größere Teilstriche und kleinere Rasterlinien für jeden Tag hinzu, aber Sie können dies anpassen. Die Funktion theme entfernt die Facettenstreifenbeschriftungen und die vertikalen Abstände zwischen den Facetten:

%Vor%

Hier ist die resultierende Handlung. Die Plätze für Wochenenden und Feiertage sind weg. Die großen Pausen markieren jede Woche. Ich habe die Wochen im scale_x_date breaks -Argument so eingestellt, dass sie an einem Donnerstag beginnen, da keiner der Feiertage an einem Donnerstag fiel und daher jede Facette ein großes Häkchen für das Datum hat. (Im Gegensatz dazu würden die Standard-Pausen an einem Montag fallen. Da Feiertage oft auf einen Montag fallen, hätten Wochen mit Montag-Feiertagen bei den Standard-Pausen keinen größeren Haken.) Beachten Sie jedoch, dass der Abstand zwischen den Haupt-Pausen von Natur aus ist hängt davon ab, wie viele Tage der Markt in dieser Woche geöffnet war.

    
eipi10 02.10.2015 05:35
quelle
1

Die OHLC konnte nicht funktionieren - denke, dass du eine benutzerdefinierte geom benötigst.

Ich weiß, dass es nicht genau das ist, wonach du gefragt hast, aber darf ich dich stattdessen mit einer köstlichen Kerzentabelle anlocken?

%Vor%

    
dvmlls 06.10.2015 07:31
quelle

Tags und Links