5

我正在使用下面的代码生成一个简单的箱线图ggplot2

# Libs data
data("mtcars"); require(ggplot2); require(ggthemes)
# Chart
ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)),
               fill = "gray87") +
  xlab("AM") +
  ylab("WT") +
  theme_gdocs() +
  ggtitle("WT by AM") +
  theme(axis.title.y = element_text(angle = 90),
        axis.ticks = element_line(colour = "black", linetype = "solid",
                                  size = 0.5),
        panel.grid = element_line(colour = "gray"))

生成的图表相当简单: 第一张图表

任务

我想为我的图表添加一个副标题,并对它的呈现方式进行一些控制。我正在关注这个讨论并使用代码:

# Chart
ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)),
               fill = "gray87") +
  xlab("AM") +
  ylab("WT") +
  theme_gdocs() +
  ggtitle(expression(atop("WT by AM", 
                          atop(italic("Some crucial note that has to be here"), "")))) +
  theme(axis.title.y = element_text(angle = 90),
        axis.ticks = element_line(colour = "black", linetype = "solid",
                                  size = 0.5),
        panel.grid = element_line(colour = "gray"))

我得到以下图表: 第二次尝试


这看起来真的很糟糕,我想改变一些事情:

  1. 使副标题标题左对齐
  2. 减少两行之间的空白
  3. 保持字体粗体

尝试

我尝试了不同的东西,例如下面的代码:

ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)),
               fill = "gray87") +
  xlab("AM") +
  ylab("WT") +
  theme_gdocs() +
  ggtitle(expression(atop("WT by AM", 
                          atop(italic("Stupid note"), "")))) +
  theme(axis.title.y = element_text(angle = 90),
        axis.ticks = element_line(colour = "black", linetype = "solid",
                                  size = 0.5),
        panel.grid = element_line(colour = "gray"),
        plot.title = element_text(size = 16, colour = "black", hjust = -1))

但它完全隐藏了标题:

缺少标题

4

3 回答 3

4

Github 目前有一个新版本的 ggplot2 (2.1.0.9000+) 可以解决您的问题。有关更多信息,请参阅Bob Rudis 的小插图。

devtools::install_github("hadley/ggplot2")  # Until the new version is available on CRAN
library(ggplot2)
library(ggthemes)  # Only necessary because the OP used theme_gdocs()

ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)), fill = "gray87") +
  xlab("AM") +
  ylab("WT") +
  theme_gdocs() +
  ggtitle("WT by AM", subtitle = "pearl of wisdom") +  # subtitle is a new argument. Both are now left-justified by default
  theme(plot.title=element_text(margin=margin(b=0), size = 20), plot.subtitle=element_text(margin=margin(t=5, b = 10)))  # Changing the size and margins of the title and subtitles to give the OP some options.

标题和副标题图像

于 2016-03-16T15:43:16.870 回答
3

从“它很愚蠢但它有效”文件中,您可以在中心右侧添加空格以强制左对齐。可以使用数学来确定正确的空格数,但我看不到如何将字符串变量传递回atop.

# Chart
ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)), fill = "gray87") +
  xlab("AM") + ylab("WT") + theme_gdocs() +
  ggtitle(expression(atop("WT by AM                            ", 
                          atop(italic("Some crucial note that has to be here"), "")))) +
  theme(axis.title.y = element_text(angle = 90),
        axis.ticks = element_line(colour = "black", linetype = "solid", size = 0.5),
        panel.grid = element_line(colour = "gray"))

在此处输入图像描述

于 2015-12-04T14:28:41.617 回答
1

它必须使用“表达式”命令吗?我在 ggplot2 中这样做,但我想这对 ggplot 有用,因为它们都使用 plotmath。

您可以使用 bquote 和 atop 根据字符串中差异的长度添加空格。您可以通过 bquote 粘贴中的 .() 从环境中获取内容。

bquote(atop(
       paste("WT by AM", .(paste0(replicate(nchar("Some Crucial Note that Has to Be Here") - nchar("WT by AM"), " "), collapse = ""), 
       paste("Some Crucial Note that Has to Be Here")
            ) 
       )

至于调整不同大小的空间(由于字体大小),我只需将复制中的长度表达式乘以一个数字(如果你得到一个分数,请使用地板或天花板)。

编辑:但是,字符“”和“a”在绘制时具有不同的长度,因此即使将空格数作为字符串长度的差异也不完美。

于 2018-02-09T22:57:15.760 回答