首页 > 解决方案 > 如何将标题文本与条形图中的左栏对齐?

问题描述

我正在尝试对齐条形图中的标题文本,以便它以与左侧条相同的垂直边距开始。

library(ggplot2)
library(tibble)

my_df <- 
  tibble::tribble(~response, ~estimate,
                  "little_bit", 0.353477,
                  "no", 0.307639,
                  "very", 0.338883)

ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
  geom_bar(stat = "identity", width = 0.9, fill = "royalblue") +
  ggtitle("do you like swimming with fish?") +
  ylab("") +
  labs(caption = "this is my caption") +
  theme_minimal() +
  theme(
    axis.line.x = element_blank(),
    axis.line.y = element_blank(),
    axis.text.y = element_blank(),
    panel.grid  = element_blank(),
    panel.grid.major=element_blank(),
    plot.title = element_text(hjust = 0.5, size = 26),
    axis.text.x = element_text(angle = 0, size = 14, margin = margin(t = 0, r = 20, b = 0, l = 0)),
    axis.title.x = element_blank(),
    legend.title = element_blank(),
    plot.caption = element_text(hjust = 0, size = 8),
    plot.caption.position = "plot") ## <-- I thought this would help, but no...

条形图


有没有办法对齐标题,如下所示?


对齐

标签: rggplot2

解决方案


要获得所需的结果,请将标题位置设置为"panel"并删除 x 比例的扩展:

library(ggplot2)
library(tibble)

my_df <- 
  tibble::tribble(~response, ~estimate,
                  "little_bit", 0.353477,
                  "no", 0.307639,
                  "very", 0.338883)

ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
  geom_bar(stat = "identity", width = 0.9, fill = "royalblue") +
  ggtitle("do you like swimming with fish?") +
  scale_x_discrete(expand = c(0, 0)) +
  labs(caption = "this is my caption", y = NULL) +
  theme_minimal() +
  theme(
    axis.line.x = element_blank(),
    axis.line.y = element_blank(),
    axis.text.y = element_blank(),
    panel.grid  = element_blank(),
    panel.grid.major=element_blank(),
    plot.title = element_text(hjust = 0.5, size = 26),
    axis.text.x = element_text(angle = 0, size = 14, margin = margin(t = 0, r = 20, b = 0, l = 0)),
    axis.title.x = element_blank(),
    legend.title = element_blank(),
    plot.caption = element_text(hjust = 0, size = 8),
    plot.caption.position = "panel") 


推荐阅读