Проблемы с маркировкой текста facet_wrap в stat_fit_glance

Мне интересно, почему текст имеет тенденцию к повышению на графиках... он не остается на месте с facet_wrap или facet_grid. На более сложном графике набора данных текст нечитаем из-за перекрытия.

Ниже приведены данные и код для воспроизведения сюжета и выпуска. Добавление geom="text" в stat_fit_glance приводит кError: Discrete value supplied to continuous scale.

library(ggpmisc)
library(ggplot2)

DF <- data.frame(Site = rep(LETTERS[20:24], each = 4),
                 Region = rep(LETTERS[14:18], each = 4),
                 time = rep(LETTERS[1:10], each = 10),
                 group = rep(LETTERS[1:4], each = 10),
                 value1 = runif(n = 1000, min = 10, max = 15),
                 value2 = runif(n = 1000, min = 100, max = 150))
DF$time <- as.numeric(DF$time)
formula1 <- y~x
plot1 <- ggplot(data=DF, 
                aes(x=time, y= value2,group=Site)) +
  geom_point(col="gray", alpha=0.5) +
  geom_line(aes(group=Site),col="gray", alpha=0.5) +
  geom_smooth(se=F, col="darkorange", alpha=0.8, fill="orange",
              method="lm",formula=formula1) +
  theme_bw() + 
  theme(strip.text.x = element_text(size=10),
        strip.text.y = element_text(size=10, face="bold", angle=0),
        strip.background = element_rect(colour="black", fill="gray90"),
        axis.text.x = element_text(size=10),  # remove x-axis text
        axis.text.y = element_text(size=10), # remove y-axis text
        axis.ticks = element_blank(),  # remove axis ticks
        axis.title.x = element_text(size=18), # remove x-axis labels
        axis.title.y = element_text(size=25), # remove y-axis labels
        panel.background = element_blank(), 
        panel.grid.major = element_blank(),  #remove major-grid labels
        panel.grid.minor = element_blank(),  #remove minor-grid labels
        plot.background = element_blank()) + 
  labs(y="", x="Year", title = "")+ facet_wrap(~group)

plot1 + stat_fit_glance(method = "lm", label.x="right", label.y="bottom",
                        method.args = list(formula = formula1),
                        aes(label = sprintf('R^2~"="~%.3f~~italic(p)~"="~%.2f',
                                            stat(..r.squared..),stat(..p.value..))),
                        parse = TRUE)

1 ответ

Решение

Когда положение этикеток устанавливается автоматически, npcyпозиция увеличивается для каждого уровня в группирующей переменной. Вы на картеSite к group эстетический, как Siteимеет 5 уровней, неравномерно отображаемых в разных аспектах, довольно грубый алгоритм в 'ggpmisc' размещает метки неравномерно: пять строк соответствуют одному каждому из пяти сайтов. Я изменил отображение, чтобы использовать цвет, чтобы это стало более очевидным. Я также удалил весь код, не имеющий отношения к этому вопросу.

plot1 <- ggplot(data=DF, 
                aes(x=time, y= value2, color=Site)) +
  geom_smooth(se=F, alpha=0.8,
              method="lm",formula=formula1) +
  facet_wrap(~group)

plot1 + 
  stat_fit_glance(method = "lm", label.x="right", label.y="bottom",
                        method.args = list(formula = formula1),
                        aes(label = sprintf('R^2~"="~%.3f~~italic(p)~"="~%.2f',
                                            stat(..r.squared..),stat(..p.value..))),
                        parse = TRUE) +
  expand_limits(y = 110)

Чтобы использовать фиксированные позиции, можно передать координаты npcy, если вы используете значение по умолчанию geom_text_npcy() или передавая координаты данных и используя geom_text(). Каждому уровню группирующего фактора соответствует одна позиция.Site. Если вектор короче, он перерабатывается. Конечно, чтобы разместить больше меток, вы можете уменьшить размер текста и добавить пространство, расширив область печати. В любом случае на практике вам нужно будет так или иначе указать, какие оценки какой строке соответствуют.

plot1 + 
  stat_fit_glance(method = "lm", label.x="right", label.y= c(0.01, 0.06, 0.11, 0.01, 0.06),
                  method.args = list(formula = formula1),
                  aes(label = sprintf('R^2~"="~%.3f~~italic(p)~"="~%.2f',
                                      stat(..r.squared..),stat(..p.value..))),
                  parse = TRUE, size = 2.5) +
  expand_limits(y = 110)

Примечание: Error: Discrete value supplied to continuous scale при попытке использовать geom_text() это ошибка в ggpmisc, которую я исправил несколько дней назад, но еще не попал в CRAN (будущая версия 0.3.3).

Другие вопросы по тегам