问题描述
我正在使用此代码:
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 日创建