Angenommen, ich habe geografische Daten (lange lat) für viele Menschen und 2 Eigenschaften für jede Person (Größe und Geschlecht), und ich möchte sie platzieren platzieren die Punkte mit den langen Lat-Daten, und die Punkte mit einem zweifarbigen Quadrat formen, die linke Hälfte entsprechend der Größe, die rechte je nach Geschlecht. Ich verwende den folgenden Trick, um Plots diese 2-farbige Quadrate (inspired from here) zu verwalten: Nehmen wir nun anmehrere Male die gleichen Punkte nach einem anderen Kriterium plotten: Probleme der Überlappung
library(ggplot2)
library(Cairo)
dataframe = read.table(text =
"Lat Long Size Sex
47.875 6.787 small F
47.684 7.032 big M
47.644 6.942 small M
47.609 7.070 big F
47.460 7.197 big F
47.508 7.110 small F
47.442 7.006 big M
47.364 7.154 small F
47.348 7.455 big M
47.264 7.013 big F", header = TRUE)
colors <- c("big" = "firebrick3", "small" = "dodgerblue4", "M" = "gold", "F" = "forestgreen")
g <- ggplot(data = dataframe, mapping = aes(x = Long, y = Lat)) +
geom_point(aes (color=Size), shape="◧", size=30) +
geom_point(aes (color=Sex), shape="◨", size=30) +
geom_point(color="black", shape="◫", size=30) +
scale_color_manual(values=colors, "")
g
, dass die Punkte müssen überlappen, aus 2 Gründen: sie sind nicht wegen der Lesbarkeit zu klein sein kann die Farben, und sie werden viel zu zahlreich sein (wie 1000 oder so) ...
Und angenommen, ich habe eine befriedigende Skala gefunden. Dies ergibt folgendes Ergebnis.
Das Problem ist mit der Art, die Punkte überlappen. Ich habe die Daten so sortiert, dass sich die unteren Punkte auf den höheren überschneiden. Dies ist nur eine Frage der Wahl. Aber es funktioniert nicht gut, da die Rechte-Hälften über den linken und die schwarzen Rechtecke über dem Rest stehen. Wie man auf dem resultierenden Bild sehen kann, bedeckt eine grüne Hälfte in der Mitte die rote Hälfte darunter und alle schwarzen Rechtecke werden oben angezeigt.
Meine Frage: Wie zeichne ich die linke Hälfte, die rechte Hälfte und die schwarzen Rechtecke für den ersten Punkt, und dann das gleiche für die zweite, usw., so dass die Überlappung ist, wie ich will, nämlich die oberen Punkte, die von den unteren abgedeckt werden?
Was ist mit der Verwendung der Rahmenfarbe und der Füllfarbe anstelle der Halb- und Halbstrategie? – Nate
Ihre Daten werden nicht richtig geladen. Verwenden Sie "dput" auf Ihre Daten und veröffentlichen Sie das Ergebnis. Ihre Daten zeichnen diesen Weg, weil Sie die Sexrechtecke als zweites zeichnen. Schauen Sie genau hin und Sie können sehen, dass andere Geschlechtsrechtecke die Größenrechtecke abdecken, wenn sie es nicht sollten. Das Diagramm ist in der richtigen Reihenfolge, es wird jedoch für jeden Aufruf von 'geom_point' einmal ausgeführt. Um zu bekommen, was Sie wollen, können Sie buchstäblich 1 Reihe hintereinander zeichnen. Eine "loop" - oder "apply" -Funktion dafür zu schreiben wäre nicht zu schwer. – CCurtis
@Nate: Ja, das könnte eine Lösung sein. Ich müsste dann überprüfen, ob die Proportionen der Grenze und der Füllflächen so sind, dass beide gut zu sehen sind. – benjamin