R语言 跨面的单个标注位置

qoefvg9y  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(203)

我正在使用ggpubr包添加回归方程和R平方到我的图中。到目前为止,这工作得很好。
但是,我有多个方面,对于某些方面,文本标签的位置与回归线重叠。

library(ggpubr)
library(ggplot2)

df <- iris

ggscatter(df, x = "Sepal.Length", y = "Sepal.Width", facet.by = "Species", add = "reg.line") +
  stat_regline_equation() +
  stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~")),
           label.y = 4.2)

是否有办法为每个面单独设置文本标签的位置?

qfe3c7zg

qfe3c7zg1#

我的第一个想法是使用after_stat来设置基于面板的标签位置。然而,结果是label.x,...不美观。第二个想法是传递向量,但也不起作用。
因此,我能想到的唯一一个为每个facet单独放置文本标签的选项是使用多个stat_regline_equationstat_cor层。为此,我使用一个 Dataframe 来指定标签位置。然后,通过faceting变量分割数据和标签 Dataframe ,并使用purrr::map2添加标签:

library(ggpubr)
#> Loading required package: ggplot2
library(ggplot2)

df <- iris

df_split <- split(df, df$Species)

df_label <- data.frame(
  Species = c("setosa", "versicolor", "virginica"),
  x = c(1, 0, 0),
  reg.y = c(.05, 1, 1),
  hjust = c(1, 0, 0),
  cor.y = c(0, .95, .95)
)
df_label_split <- split(df_label, df_label$Species)

ggscatter(df, x = "Sepal.Length", y = "Sepal.Width", facet.by = "Species", add = "reg.line") +
  purrr::map2(
    df_split, df_label_split,
    function(x, y) {
      list(
        stat_regline_equation(
          data = x, 
          label.x.npc = y$x, label.y.npc = y$reg.y, hjust = y$hjust),
        stat_cor(
          data = x, aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~")),
          label.y.npc = y$cor.y, hjust = y$hjust, label.x.npc = y$x
        )
      )
    }
  )

相关问题