أضف ملصقات المجموعة الفرعية إلى مؤامرة الارتعاش في GGPLOT2
سؤال
لدي ما يقرب من boxplot مثل jitter-plot:
dt <- rbind(se,cb,cb.se)
qplot(ds, size, data=dt, geom="jitter", colour=root, facets = test ~ .)
أحب أن أضع علامة ملخص لكل مجموعة في منتصف المؤامرة - على سبيل المثال مجاميع الحجم هنا:
aggregate(list(size=dt$size), list(dt$ds, dt$test), sum)
Group.1 Group.2 size
1 b217 se 9847
2 c10 se 97296
3 c613 se 21633
4 c7 se 207540
...
لقد حاولت استخدام + geom_text(aes(x=ds, y=128, label=sum(size)), size=2)
لإضافة ملصقات ، لكنني أحصل على نفس التسمية في كل موقف - كيف يمكنني الحصول على مجموع هذا القسم من البيانات؟
تعديل:هنا حيث أنا الآن - ربما سأذهب في الاتجاه الخاطئ فقط
data <- rbind(se,cb,cb.se)
labels <-ddply(data, c("ds", "test"), function(df) sum(df$size))
ggplot(data=data, aes(x=ds)) +
geom_jitter(aes(y=size, colour=root)) +
geom_text(data=labels, aes(x=ds, y=600, label=V1), size=3) +
facet_wrap(test ~ .)
هذا الرمز لا يعمل - أحصل على undefined columns selected
خطأ ... في مكان ما. ربما يكون ذلك بسبب المضاعفات data=
أقسام؟
المحلول
نظرًا لأنك لا تقدم عينة من البيانات ، فسوف أقوم بإظهار حل باستخدام بيانات عشوائية.
set.seed(1)
n <- 100
dat <- data.frame(
ds = sample(paste("x", 1:8, sep=""), n, replace=TRUE),
size = runif(n, 0, 250),
root = sample(c(TRUE, FALSE), n, replace=TRUE),
test = sample(c("se", "cb", "cb.se"), n, replace=TRUE)
)
head(dat)
ds size root test
1 x3 163.68098 TRUE cb.se
2 x3 88.29932 TRUE se
3 x5 67.56504 FALSE cb
4 x8 248.17102 TRUE cb
5 x2 158.37332 TRUE cb
6 x8 53.30203 FALSE cb.se
p <- ggplot(dat, aes(x=ds, y=size)) +
geom_jitter(aes(colour=root)) +
facet_grid(test~.)
قم بإنشاء إطار البيانات الذي يحتوي على بيانات التسمية. لاحظ استخدام summarize
. هذا يروي ddply
لإنشاء عمود جديد إلى data.frame
labels <- ddply(dat, .(ds, test), summarize, size=round(sum(size), 0))
head(labels)
ds test size
1 x1 cb 193
2 x1 cb.se 615
3 x1 se 274
4 x2 cb 272
5 x2 cb.se 341
6 x2 se 1012
p + geom_text(aes(x=ds, label=size, y=128), data=labels, size=2)
نصائح أخرى
نلقي نظرة هنا. قد يكون مفيدًاإضافة ملصقات مباشرة إلى مؤامرات GGPLOT2