将子组标签添加到 ggplot2 中的抖动图中

发布于 2024-08-19 01:28:08 字数 1086 浏览 1 评论 0原文

我有一个像抖动图一样的箱线图:

dt <- rbind(se,cb,cb.se)
qplot(ds, size, data=dt, geom="jitter", colour=root, facets = test ~ .)

plot

我很乐意在图的中间为每个组放置一个摘要标签 - 例如这里的大小总计:

 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 ~ .)

此代码不起作用 - 我在某处收到未定义的列选择错误...。也许是因为有多个 data= 部分?

I have a nearly-boxplot like jitter-plot:

dt <- rbind(se,cb,cb.se)
qplot(ds, size, data=dt, geom="jitter", colour=root, facets = test ~ .)

plot

I'd love to put a summary label for each group in the middle of the plot - for example the size totals here:

 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
...

I've tried using + geom_text(aes(x=ds, y=128, label=sum(size)), size=2) to add labels, but I get the same label on each position - how can I get the sum of just that section of data?

Edit:
Here's where I'm at now - maybe I'm just going in the wrong direction

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 ~ .)

This code doesn't work - I get an undefined columns selected error... somewhere. Maybe it's because of the multiple data= sections?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

游魂 2024-08-26 01:28:08

由于您不提供样本数据,我将使用随机数据演示一个解决方案。

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) 

在此处输入图像描述

Since you don't provide sample data, I shall demonstrate a solution using random 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~.) 

Create the data frame containing label data. Note the use of summarize. This tells ddply to create a new column to the 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) 

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文