Мясеен208,
Вот обходной путь для проблемы с созданием вывода .tex
с ggpmisc::stat_poly_eq()
. Мне удалось подтвердить, что в настоящее время вы не можете комбинировать stat_poly_eq()
и "hat(Y)~
=~"
с library(tikzDevice)
для создания латексного вывода .tex
. Однако я предоставил решение для создания правильного вывода .tex
в промежуточный период.
Педро Афало, создатель пакета ggpmisc
, очень любезно принял запрос на улучшение ggpmisc::stat_poly_eq()
. Согласно запрошенному отчету об ошибке, поданному и указанному ниже.
Пример кода:
Следующий код создаст графику без символа шляпы:
# Load required packages
requiredPackages <- requiredPackages <- c("ggplot2", "ggpmisc", "tikzDevice", "latex2exp")
# ipak - Check to see if the package is installed, if not install and then load...
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)
# generate artificial data
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")
)
# Define Formaula..
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 = "")),
# eq.with.lhs = "italic(hat(y))~`=`~",
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
![введите здесь описание изображения](https://i.stack.imgur.com/rBqvZ.png)
теперь мы можем изменить этот код и его tikz output
, чтобы получить желаемый результат:
Кодовое решение Tikz
Первым шагом является изменение кода для вывода требуемого файла .tex
. После этого мы можем использовать gsub()
для поиска необходимых строк в файле .tex
и заменить {\itshape y};
на {\^{y}};
[строки 646 и 693].
# Load required packages
requiredPackages <- requiredPackages <- c("ggplot2", "ggpmisc", "tikzDevice", "latex2exp")
# ipak - Check to see if the package is installed, if not install and then load...
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)
# generate artificial data
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"
# setup tex output file
tikz(file = texFile, width = 5.5, height = 5.5)
#Define Formaula..
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 = "")),
# eq.with.lhs = "italic(hat(y))~`=`~",
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()
## OK, now we can take the test.txt file and replace the relevant attributes to
## add the hat back to the y in the .tex output file...
texOutputFile <- readLines(texFile)
y <- gsub('itshape y', '^{y}', texOutputFile )
cat(y, file=texFile, sep="\n")
Структура тестов Tex:
Чтобы протестировать решение, мы можем создать небольшой тестовый жгут из латекса. Вы можете загрузить этот файл в RStudio [t1.tex
] и затем скомпилировать его; он вытянет test2.text
, сгенерированный с помощью представленного ранее кода.
обратите внимание RStudio — отличная платформа для скомпилированного латексного вывода из R.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}[ht]
\input{test2.tex}
\caption{Sample output from tikzDevice 2}
\end{figure}
\end{document}
результат:
![введите здесь описание изображения](https://i.stack.imgur.com/B1zMR.png)
Альтернативное решение
Другим вариантом может быть использование geom_text()
. Недостатком этого подхода является то, что вам нужно самостоятельно написать уравнение линии регрессии. Это обсуждалось в вашем предыдущем сообщении: Добавление уравнения линии регрессии и R2 на графике
Если вам нужно подробное решение [с geom_text], отправьте мне пинг. Другой вариант — отправить отчет об ошибке с помощью ggpmisc [сделано мной] и посмотреть, обратился ли автор уже или может обратиться.
Отчет об ошибке: https://bitbucket.org/aphalo/ggpmisc/issues/1/stat_poly_eq-fails-when-used-with
Я надеюсь, что вышеизложенное поможет.
person
Technophobe01
schedule
22.05.2016
round
иsignif
возвращают числовые значения,sprintf
возвращает символьное значение. В зависимости от спецификации форматаsprintf
будет использовать эквивалентround
илиsignif
для преобразования числа. - person Pedro Aphalo   schedule 23.05.2016