Myaseen208,
以下是解决使用 ggpmisc::stat_poly_eq()
创建 .tex
输出问题的解决方法。我确认您目前无法将 stat_poly_eq()
和 "hat(Y)~
=~"
与 library(tikzDevice)
结合使用来创建latex .tex
输出。然而,我已经提供了一种解决方案,在过渡期间可以创建正确的 .tex
输出。
ggpmisc
包的创建者 Pedro Aphalo 已经非常友善地接受了对 ggpmisc::stat_poly_eq()
的增强请求。请参考下面提交的错误报告。
代码示例:
以下代码将生成一个没有帽子符号的图形:
requiredPackages <- requiredPackages <- c("ggplot2", "ggpmisc", "tikzDevice", "latex2exp")
ipak <- function(pkg)
{
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
}
ipak(requiredPackages)
set.seed(4321)
x <- 1:100
y <- (x + x ^ 2 + x ^ 3) + rnorm(length(x), mean = 0, sd = mean(x ^ 3) / 4)
my.data <- data.frame(
x, y,
group = c("A", "B"),
y2 = y * c(0.5, 2),
block = c("a", "a", "b", "b")
)
formulaDefined <- (y ~ (poly(x = x, degree = 2, raw = TRUE)))
gp <- ggplot(data = my.data, mapping = aes(x = x, y = y2, colour = group))
gp <- gp + geom_point()
gp <- gp + geom_smooth(method = "lm", se = FALSE, formula = formulaDefined )
gp <- gp + stat_poly_eq(
aes(label = paste(..eq.label.., "~~~", ..rr.label.., sep = "")),
formula = formulaDefined,
geom = "text",
label.x = 0,
label.y = 2e6,
vjust = c(1.2, 0),
position = "identity",
na.rm = FALSE,
show.legend = FALSE,
inherit.aes = TRUE,
parse = TRUE)
gp <- gp + theme_bw()
gp
我们现在可以修改这段代码及其 tikz输出
,以创建所需的结果:
Tikz 代码解决方案
第一步是修改代码以输出所需的 .tex
文件。完成后,我们可以利用 gsub()
在 .tex
文件中找到需要的行,并将 {\itshape y};
替换为 {\^{y}};
[第646和693行]。
requiredPackages <- requiredPackages <- c("ggplot2", "ggpmisc", "tikzDevice", "latex2exp")
ipak <- function(pkg)
{
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
}
ipak(requiredPackages)
set.seed(4321)
x <- 1:100
y <- (x + x ^ 2 + x ^ 3) + rnorm(length(x), mean = 0, sd = mean(x ^ 3) / 4)
my.data <- data.frame(
x, y,
group = c("A", "B"),
y2 = y * c(0.5, 2),
block = c("a", "a", "b", "b")
)
setwd("~/dev/stackoverflow/37242863")
texFile <- "./test2.tex"
tikz(file = texFile, width = 5.5, height = 5.5)
formulaDefined <- (y ~ (poly(x = x, degree = 2, raw = TRUE)))
gp <- ggplot(data = my.data, mapping = aes(x = x, y = y2, colour = group))
gp <- gp + geom_point()
gp <- gp + geom_smooth(method = "lm", se = FALSE, formula = formulaDefined )
gp <- gp + stat_poly_eq(
aes(label = paste(..eq.label.., "~~~", ..rr.label.., sep = "")),
formula = formulaDefined,
geom = "text",
label.x = 0,
label.y = 2e6,
vjust = c(1.2, 0),
position = "identity",
na.rm = FALSE,
show.legend = FALSE,
inherit.aes = TRUE,
parse = TRUE)
gp <- gp + theme_bw()
gp
dev.off()
texOutputFile <- readLines(texFile)
y <- gsub('itshape y', '^{y}', texOutputFile )
cat(y, file=texFile, sep="\n")
Tex测试框架:
为了测试解决方案,我们可以创建一个小的LaTeX测试工具。您可以在RStudio [t1.tex
]中加载此文件,然后编译它;它将引入通过先前呈现的代码生成的test2.text
。
注意:RStudio是从R编译的LaTeX输出的绝佳平台。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}[ht]
\input{test2.tex}
\caption{Sample output from tikzDevice 2}
\end{figure}
\end{document}
结果:
替代方案
另一个选择可能是使用geom_text()
,这种方法的缺点是您必须自己编写回归线方程函数。这在您之前的帖子中已经讨论过:在图表上添加回归线方程和R2
如果您需要详细的解决方案[使用geom_text],那么请联系我。另一个选择是向ggpmisc提交错误报告[我已完成],看看作者是否已经解决或可以解决。
错误报告:https://bitbucket.org/aphalo/ggpmisc/issues/1/stat_poly_eq-fails-when-used-with
希望以上内容能帮到您。
round
和signif
返回数字值,sprintf
返回字符值。根据格式规范,sprintf
将使用与round
或signif
等效的方式来转换数字。 - Pedro J. Aphalo