我正在使用以下代码在 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"))
我得到了以下的图表:
![second attempt](https://istack.dev59.com/ciRJ1.webp)
这看起来非常糟糕,我想改变一些东西:
- 将副标题和标题都左对齐
- 减少两行之间的空白
- 保持字体加粗
尝试
我尝试了不同的方法,例如下面的代码:
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))
但它完全隐藏了标题:
hjust
必须在 0 和 1 之间。另外,您需要斜体字吗?否则,您可以使用ggtitle("WT by AM\n这里必须有一些关键说明")
。 - Roland\n
来换行,就像这里讨论的,但我更想驯服expression
,以便我可以强制它表现出我想要的样子。我知道这可能有点琐碎。 - Konradatop
与左对齐结合使用。祝好运。 - Rolandexpression
很灵活。最后,我不认为这是一个奇怪的请求。顺便说一下,我使用hjust = 0.5
创建了一个漂亮的图表版本,并将标题放在中心位置。话虽如此,我更喜欢保持接近使用theme_gdocs()
提供的样式,因为我很喜欢它。 - Konradatop
中的?因为我只能让它传递文字字面量--例如,如果我放入atop(eval(foo))
,它会在标题中直接放置“eval(foo)”。 - C8H10N4O2