مشكلة مع Legend أثناء رسم البيانات من بيانات اثنين
سؤال
أواجه مشكلة صغيرة في الحصول على GGPLOT2 للعمل كما أريد. في الأساس ، أود مقارنة الملاحظات الفعلية مقابل تقريبها من خلال وضعها في مؤامرة واحدة. فمثلا،
> library(ggplot2)
> df.actual <- data.frame(x = 1:100, y = (1:100) * 2)
> df.approx <- data.frame(x = 1:150, y = (1:150) * 2 + 5 + rnorm(150, mean = 3) )
> ggplot() + geom_point(aes(x, y), data = df.actual) + geom_line(aes(x,y), data = df.approx)
مشكلتي هي أنه لا يمكنني عرض أسطورة. قرأت في مكان ما أن أسطورة GGPLOT2 ليست مرنة للغاية (؟). من الناحية المثالية ، أسطورة مع
- العنوان = "النوع"
- المفتاح: نقطة مملوءة سوداء وخط أسود
- تسمية المفتاح: "الفعلي" ، "تقريبي"
- Legend.position = 'topright'
شكرًا.
المحلول
جرب هذا لتبدأ
ggplot() +
geom_point(aes(x, y, colour = "actual"), data = df.actual) +
geom_line(aes(x, y, colour = "approximate"), data = df.approx) +
scale_colour_discrete("Type")
نصائح أخرى
هذا نوع من الاختراق لتعديل الأسطورة عن طريق معالجة كائن الشبكة:
library("ggplot2")
df.actual <- data.frame(x=1:100, y=(1:100)*2)
df.approx <- data.frame(x=1:150, y=(1:150)*2 + 5 + rnorm(150, mean=3))
p <- ggplot() +
geom_point(aes(x, y, colour="Actual"), data=df.actual) +
geom_line(aes(x, y, colour="Approximate"), data=df.approx) +
scale_colour_manual(name="Type",
values=c("Actual"="black", "Approximate"="black"))
library("grid")
grob <- ggplotGrob(p)
tmp <- grid.ls(getGrob(grob, "key.segments", grep=TRUE, global=TRUE))$name
grob <- removeGrob(grob, tmp[1]) # remove first line segment in legend key
tmp <- grid.ls(getGrob(grob, "key.points", grep=TRUE, global=TRUE))$name
grob <- removeGrob(grob, tmp[2]) # remove second point in legend key
grid.draw(grob)
GgPlot2 Output http://img134.imageshack.us/img134/8427/ggplotlegend.png
لا تنتمي إلى StackOverflow