我正在尝试修改如何在使用R 包stat_regline_equation
制作的图上显示回归线方程。具体来说,我想显示一致的系数位数,即使某些舍入系数具有尾随零,这些零通常被删除。这是一个例子:ggscatter
ggpubr
library(tidyverse)
library(ggpubr)
diamonds %>%
filter(color %in% c("E", "H", "I")) %>%
ggscatter(x="carat", y="table", add="reg.line") +
facet_wrap(~color) +
stat_regline_equation(label.y.npc = 'top')
图 I 很好,图 H 删除了一个尾随零,图 E 完全删除了斜率,因为它四舍五入到 1.00。基于我在这里得到的一个很好的答案以及一个不同的答案,我尝试修改包代码,trace(ggpubr:::.stat_lm, edit = TRUE)
用于修改第 13 和 14 行
eq.char <- as.character(signif(polynom::as.polynomial(coefs), 2))
至
eq.char <- as.character(formatC(polynom::as.polynomial(coefs), format = "f", digits = 2))
这就是问题所在:如果您将一个polynom::polynomial
对象传递给signif
or round
,它们会返回另一个polynom::polynomial
对象,但对于formatC
orsprintf
它们会返回字符:
coefs = diamonds %>%
filter(color=='E') %>%
stats::lm(table~carat, .) %>%
stats::coef()
coefs %>%
polynom::as.polynomial() %>%
formatC(format='f', digits=2) %>%
class() %>%
print()
coefs %>%
polynom::as.polynomial() %>%
signif(digits = 2) %>%
class() %>%
print()
[1] "character"
[1] "polynomial"
因此,我在上面使用的尝试formatC
不起作用。我猜这个polynom::polynomial
类有内置的round
and方法signif
,而没有内置方法formatC
,所以后者的输出是强制的。我可能会尝试修改 的类定义polynom::polynomial
,但在这个阶段,我觉得必须有一种更简单的方法来在我的图表上显示的回归方程上获得尾随零。我希望这是一个足够普遍的愿望,有人有一个更简单的解决方案,或者至少一个答案可能对我以外的更多人有用。