library(tidyverse)
sales <-
tibble(store = rep(c("ABC", "DEF", "GHI"), each = 2),
metric = factor(rep(c("sales", "satisfaction"), 3),
# levels = c("sales", "satisfaction")),
levels = c("satisfaction", "sales")),
risk = factor(c("medium", "low", "low", "low", "high", "medium"),
levels = c("low", "medium", "high")),
value = signif(runif(6, 0, 100), 4))
ggplot(sales, aes(store, metric)) +
geom_tile(aes(fill = risk), color = "grey50") +
scale_fill_manual(values = c("green", "yellow", "red")) +
scale_x_discrete(position = "top") +
theme_minimal() +
theme(axis.title = element_blank(),
axis.text.x = element_text(angle = 90, hjust = 1),
legend.position = "none") +
geom_text(aes(label = value))
Run Code Online (Sandbox Code Playgroud)
x 轴文本字母(例如“ABC”、“DEF”等)的底部与 x 轴上的刻度线对齐。我想将此文本向右轻推,以将文本与 x 轴上的刻度线居中。
我想不出任何hjust
和vjust
(从 0 到 1)的组合来水平移动这个 x 轴文本。如果它也有角度,ggplot 是否可以对齐文本?
此问题已在 github ( https://github.com/tidyverse/ggplot2/issues/1878 )上报告。简而言之,当您将 x 轴移动到顶部时,vjust
只有将其应用于axis.text.x.top
.
因此,对于您的代码,您需要执行以下操作:
ggplot(sales, aes(store, metric)) +
geom_tile(aes(fill = risk), color = "grey50") +
scale_fill_manual(values = c("green", "yellow", "red")) +
scale_x_discrete(position = "top") +
theme_minimal() +
theme(axis.title = element_blank(),
axis.text.x = element_text(angle = 90),
axis.text.x.top = element_text(vjust = 0.5),
legend.position = "none") +
geom_text(aes(label = value))
Run Code Online (Sandbox Code Playgroud)