gpt4 book ai didi

重构重复出现的 ggplot 代码

转载 作者:行者123 更新时间:2023-12-02 07:41:22 26 4
gpt4 key购买 nike

我正在使用 R 和 ggplot2 分析篮球比赛的一些统计数据。我是 R 和 ggplot 的新手,鉴于我有限的经验,我喜欢我得到的结果。但是随着我的进行,我发现我的代码变得重复了;我不喜欢。

我创建了几个与此类似的图:

Net Rating by Effective Field Goal percentage

代码:

efgPlot <- ggplot(gmStats, aes(EFGpct, Nrtg)) + 
stat_smooth(method = "lm") +
geom_point(aes(colour=plg_ShortName, shape=plg_ShortName)) +
scale_shape_manual(values=as.numeric(gmStats$plg_ShortName))

图之间的唯一区别是 x 值;下一个情节是:

orPlot <- ggplot(gmStats, aes(ORpct, Nrtg)) + 
stat_smooth(method = "lm") + ... # from here all is the same

我怎样才能重构这个,这样我就可以做类似的事情:

efgPlot <- getPlot(gmStats, EFGpct, Nrtg))
orPlot <- getPlot(gmStats, ORpct, Nrtg))

更新

我认为我重构它的方式并不是真正的“R-ish”(或者 ggplot-ish,如果你愿意的话);根据下面 baptiste 的评论,我解决了这个问题而没有将任何东西重构为函数;见my answer below .

最佳答案

这类事情的关键是使用 aes_string 而不是 aes(当然未经测试):

getPlot <- function(data,xvar,yvar){
p <- ggplot(data, aes_string(x = xvar, y = yvar)) +
stat_smooth(method = "lm") +
geom_point(aes(colour=plg_ShortName, shape=plg_ShortName)) +
scale_shape_manual(values=as.numeric(data$plg_ShortName))
print(p)
invisible(p)
}

aes_string 允许您将变量名作为字符串传递,而不是表达式,这在编写函数时更方便。当然,您可能不想对颜色和形状比例进行硬编码,在这种情况下,您可以再次使用 aes_string

关于重构重复出现的 ggplot 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10833501/

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