在 geom_tile 图上粘贴平均值R 中的 ggplot

问题描述

我正在使用此代码

 library(tidyverse)
 library(reshape)
 mtcars <- melt(mtcars,id="vs")
 mtcars$vs <- as.character(mtcars$vs)
 ggplot(mtcars,aes(x=vs,y=variable,fill=value)) + 
      geom_tile()

如何将平均值作为文本粘贴到每个图块上?我试过 + geom_text(mtcars,aes(vs,variable,label=mean)),但没有用。

另外,如何在 x 轴上颠倒 0 和 1 的顺序?

解决方法

您可以使用 stat_summary_2d() 调整 after_stat() 以显示基于计算变量的文本。可以通过设置 x-scale 的 limits 参数来确定 x 轴的顺序。

suppressPackageStartupMessages({
  library(tidyverse)
  library(reshape)
  library(scales)
})

mtcars <- melt(mtcars,id="vs")
mtcars$vs <- as.character(mtcars$vs)

ggplot(mtcars,aes(x=vs,y =variable,fill = value)) +
  geom_tile() +
  stat_summary_2d(
    aes(z = value,label = after_stat(number(value,accuracy = 0.01))),fun = mean,geom = "text"
  ) +
  scale_x_discrete(limits = c("1","0"))

reprex package (v1.0.0) 于 2021 年 4 月 6 日创建

另请注意,geom_tile() 仅绘制属于 x 轴和 y 轴类别的数据集的最后一行,因此除非有意如此,否则需要注意这一点。

,

你可以在ggplot之外做处理工作来产生:

library(ggplot2)
library(dplyr)
library(tidyr)

df <- 
  mtcars %>%
  pivot_longer(-vs) %>% 
  group_by(vs,name) %>% 
  mutate(vs = factor(vs,levels = c(1,0),ordered = TRUE),mean = round(mean(value),2))


ggplot(df,y=name,fill=value)) + 
  geom_tile() +
  geom_text(aes(vs,name,label=mean),colour = "white",check_overlap = TRUE)  

reprex package (v1.0.0) 于 2021 年 4 月 6 日创建