我有以下数据(temp.dat请参阅完整数据的结束注释)
Year State Capex
1 2003 VIC 5.356415
2 2004 VIC 5.765232
3 2005 VIC 5.247276
4 2006 VIC 5.579882
5 2007 VIC 5.142464
...
Run Code Online (Sandbox Code Playgroud)
我可以生成以下图表:
ggplot(temp.dat) +
geom_line(aes(x = Year, y = Capex, group = State, colour = State))
Run Code Online (Sandbox Code Playgroud)

而不是传说,我喜欢标签
我在以下链接的答案中注意到了baptiste的评论,但是当我尝试调整他的代码(geom_text(aes(label = State, colour = State, x = Inf, y = Capex), hjust = -1))时,文本没有出现.
temp.dat <- structure(list(Year = c("2003", "2004", "2005", "2006", "2007",
"2008", "2009", "2010", "2011", "2012", "2013", …Run Code Online (Sandbox Code Playgroud) 好吧,我挥舞着我的白旗。
我正在尝试对我的数据集计算 loess 回归。
我希望 loess 计算一组不同的点,这些点绘制为每个组的平滑线。
问题是 loess 计算是在逃避dplyr::group_by函数,所以 loess 回归是在整个数据集上计算的。
互联网搜索让我相信这是因为dplyr::group_by不应该以这种方式工作。
我只是不知道如何在每个组的基础上进行这项工作。
以下是我尝试失败的一些示例。
test2 <- test %>%
group_by(CpG) %>%
dplyr::arrange(AVGMOrder) %>%
do(broom::tidy(predict(loess(Meth ~ AVGMOrder, span = .85, data=.))))
> test2
# A tibble: 136 x 2
# Groups: CpG [4]
CpG x
<chr> <dbl>
1 cg01003813 0.781
2 cg01003813 0.793
3 cg01003813 0.805
4 cg01003813 0.816
5 cg01003813 0.829
6 cg01003813 0.841
7 cg01003813 0.854
8 cg01003813 0.866
9 cg01003813 0.878
10 cg01003813 0.893 …Run Code Online (Sandbox Code Playgroud) 我认识到这个问题的亲密重复这一个,但解决方案也不再有效(使用method="last.qp"),所以我再次要求它。
基本问题是我想使用directlabels(或等效的)来标记每个组的平滑均值(来自stat_smooth()),而不是实际数据。下面的示例显示了我所得到的最接近的结果,但标签无法识别分组,甚至无法识别平滑线。相反,我在最后一点得到了标签。我想要的是每条平滑线末尾的颜色协调文本,而不是图右侧的图例。
下面是一个例子:
library(ggplot2)
library(directlabels)
## Data
set.seed(10)
d <- data.frame(x=seq(1,100,1), y=rnorm(100, 3, 0.5))
d$z <- ifelse(d$y>3,1,0)
## Plot
p <- ggplot(d, aes(x=x, y=y, colour=as.factor(z))) +
stat_smooth(inherit.aes=T, se=F, span=0.8, show.legend = T) +
geom_line(colour="grey50") +
scale_x_continuous(limits=c(0,110)) +
geom_dl(label="text", method="maxvar.points", inherit.aes=T)
p
Run Code Online (Sandbox Code Playgroud)