gpt4 book ai didi

r - 使用 ggplot 进行条件文本格式化

转载 作者:行者123 更新时间:2023-12-01 11:54:54 25 4
gpt4 key购买 nike

我仔细浏览了这个网站和其他网站,了解如何根据特定列中的值设置 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)

所以

> 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

我想实现的是基于团队的 vjust 值(value)。在下面,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)

以下是伪(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)

我为此尝试了其他几种策略,但我无法判断我是从错误的方向尝试这个,还是我只是错过了一段非常微不足道的 ggplot 语法。我通过在 Excel 中手动标记它们来完成一个权宜之计,但这是不可持续的:-)

最佳答案

要指定美学,该美学应该是 data.frame 中的一列。

(还要注意您的查找函数应该有单括号,而不是双括号。)

最后一个想法:vjusthjust 严格只在 [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))

enter image description here

关于r - 使用 ggplot 进行条件文本格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com