我已经很好地了解了这个网站和其他人如何根据特定列中的值设置hjust和vjust.以下显示了数据的结构(但多年来是许多条目的简化子集):
YearStart <- c(2001,2002,2003,2001,2002,2003)
Team <- c("MU","MU","MU","MC","MC","MC")
Attendance <- c(67586,67601,67640,33058,34564,46834)
Position <- c(3,1,3,1,9,16)
offset <-c()
df <- data.frame(YearStart,Team,Attendance,Position)
Run Code Online (Sandbox Code Playgroud)
所以
> head(df)
YearStart Team Attendance Position
1 2001 MU 67586 3
2 2002 MU 67601 1
3 2003 MU 67640 3
4 2001 MC 33058 1
5 2002 MC 34564 9
6 2003 MC 46834 16
Run Code Online (Sandbox Code Playgroud)
我想acheive是vjust基于团队的价值.在下文中,MU将是vjust = 1并且MC将是vjust = -1,因此我可以从与其关联的数据组控制数据标签的位置.
我试图破解几个使用包含查找表的函数的例子(它不是直接的ifelse,因为我有很多Team的值)但我似乎无法通过aes方法将字符串传递给函数沿着这些方向:
lut <- list(MU=1,MC=-1)
vj <-function(x){lut[[x]]}
p=ggplot(df, aes(YearStart, Attendance, label=Position, group=Team))+
geom_point()+
geom_text(aes(vjust = vj(Team) ) )
print(p)
Run Code Online (Sandbox Code Playgroud)
以下是伪(ish)代码,它在点的上方和下方的每个位置对每组应用标签两次.
p=ggplot(df, aes(YearStart, Attendance, label=Position, group=Team))+
geom_point()+
geom_text(aes(Team="MU"), vjust=1)+
geom_text(aes(Team="MC"), vjust=-1)
print(p)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了其他几种策略,我无法判断我是从错误的方向尝试这个,还是我只是错过了一个非常简单的ggplot语法.我已经通过在Excel中手动标记它们来完成了一个临时解决方案,但这是不可持续的:-)
为了指明审美,美学应该是你的一个专栏data.frame.
(另请注意,您的查找函数应该有单括号,而不是double.)
最后一个想法:vjust并且hjust严格地仅在[0, 1]左/右和右/顶部对齐之间定义.然而,在实践中,通常可以扩展它.(-0.2, 1.2)在大多数情况下,我发现工作设置非常好.
lut <- list(MU=-0.2, MC=1.2)
vj <- function(x) lut[x]
df$offset <- vj(df$Team)
library(ggplot2)
ggplot(df, aes(YearStart, Attendance, label=Position, group=Team)) +
geom_point(aes(colour=Team)) +
geom_text(aes(vjust = offset))
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |