2

我正在尝试绘制ggplot2并尝试将标签放置在具有置信区域的平均轨迹上的正确位置。由于我无法共享我的数据,我创建了一个可重现的示例:

set.seed(456)
library(ggplot2)
library(directlabels)
time<-1:25
df2<-data.frame(time,value=runif(2500),group=as.factor(c(rep('Alpha',1250),rep('Beta',1250))))
ggplot(df2, aes(x=time, y=value,group=group,colour=group))+
      stat_summary(geom="ribbon", fun.data=mean_cl_normal,fun.args=list(conf.int=0.95), fill="grey")+
      stat_summary(geom="line", fun=mean,size=2,show.legend=TRUE)+
      stat_summary(geom="point", fun=mean, color="red",size=3)+
      theme(legend.position='none',axis.title=element_text(size=40),
        axis.text=element_text(size=30),panel.background = element_blank(),axis.line = 
        element_line(colour = 'black'))+
      geom_dl(aes(label = group),method=list(dl.combine('first.qp','last.qp')),color='black')

我得到以下情节: 在此处输入图像描述

如您所见,标签完全错误。我试图将标签放在第一个平均点旁边和/或最后一个平均点旁边。使用我的数据,结果更糟:两个标签都在较低的轨迹下并且都重叠。我还得到以下信息warning

┌ Warning: RCall.jl: Warning in regularize.values(x, y, ties, missing(ties)) :
│   collapsing to unique 'x' values
│ Warning in regularize.values(x, y, ties, missing(ties)) :
│   collapsing to unique 'x' values
│ Warning in regularize.values(x, y, ties, missing(ties)) :
│   collapsing to unique 'x' values
│ Warning in regularize.values(x, y, ties, missing(ties)) :
│   collapsing to unique 'x' values

如何解决我的问题并将标签放在每个轨迹的第一个/最后一个平均值旁边?我试图更改method选项但没有成功......由于绘制的点是手段,因此方法.points不起作用。此外,如何控制标签的大小?

我尝试了另一个ggplot2代码:

ggplot(df2, aes(x=time, y=value,group=group,colour=group))+
       stat_summary(geom="ribbon", fun.data=mean_cl_normal,
                fun.args=list(conf.int=0.95), fill="grey")+
       stat_summary(geom="line", fun=mean,size=2,show.legend=TRUE)+
       stat_summary(geom="point", fun=mean, color="red",size=3)+
       theme(legend.position = 'none',axis.title=element_text(size=40),
                axis.text=element_text(size=30),panel.background = 
                element_blank(),axis.line = element_line(colour = 
                'black'))+
       stat_summary(aes(label=group), fun=mean, geom="text", size=8)

我得到以下情节:

在此处输入图像描述

如果我只能保留第一个和/或最后一个标签,我想我已经接近最后一个情节了。

4

1 回答 1

1

您的最后一种方法已经走在正确的轨道上。为了使其工作,您必须过滤您的 df 以仅包含第一次和最后一次的 obs。尝试这个:

set.seed(456)
library(ggplot2)
library(dplyr)

time<-1:25
df2<-data.frame(time,value=runif(2500),group=as.factor(c(rep('Alpha',1250),rep('Beta',1250))))

dlabs <- df2 %>%
  group_by(group) %>% 
  arrange(time) %>% 
  filter(time %in% c(first(time), last(time)))

ggplot(df2, aes(x=time, y=value,group=group,colour=group))+
  stat_summary(geom="ribbon", fun.data=mean_cl_normal,fun.args=list(conf.int=0.95), fill="grey")+
  stat_summary(geom="line", fun=mean,size=2,show.legend=TRUE)+
  stat_summary(geom="point", fun=mean, color="red",size=3)+
  theme(legend.position='none',axis.title=element_text(size=40),
        axis.text=element_text(size=30),panel.background = element_blank(),axis.line = 
          element_line(colour = 'black'))+
  stat_summary(data = dlabs, aes(label = group, hjust = ifelse(time == first(time), 1.2, -.2)), fun = mean, geom = "text", color = "black") +
  scale_x_continuous(expand = expansion(mult = .1))

于 2020-07-30T08:49:04.473 回答