#r #ggplot2 #tidyverse #geom-text #geom-tile
Вопрос:
Я использую этот код:
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))
, но это не работает.
Кроме того, как я могу изменить порядок 0 и 1 на оси x?
Ответ №1:
Вы можете настроить stat_summary_2d()
отображение текста на основе вычисленных переменных с after_stat()
помощью . Порядок оси x можно определить, задав 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"))
Создано 2021-04-06 пакетом reprex (v1.0.0)
Также обратите внимание, что geom_tile()
just отображает последнюю строку набора данных, принадлежащую категориям по осям x и y, поэтому, если это не предусмотрено, об этом следует знать.
Ответ №2:
Вы можете выполнить обработку за пределами 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, aes(x=vs, y=name, fill=value))
geom_tile()
geom_text(aes(vs, name, label=mean), colour = "white", check_overlap = TRUE)
Создано 2021-04-06 пакетом reprex (v1.0.0)
Комментарии:
1. Спасибо тебе, Питер. Потрясающе! 🙂