0

有人知道如何在我制作的这张图表中左对齐副标题吗?没有与我使用的任何方法结婚,除了使用 ggplot。

library(ggplot2)
library(ggthemes)
library(grid)

# Random exponential sample
set.seed(10)
n=20
y<-rexp(n=n)
y<-y[order(y)]
x<-seq(n)+1990
mydata<-data.frame(cbind(x,y))

# Plot
p <- (ggplot(mydata, aes(x=x, y=y))
  + geom_point(size=3,alpha=.50)
  + geom_smooth(method="lm",formula=y~poly(x,2,raw=T),se=F,size=1)
  + theme_economist(base_size=12, base_family="Avenir")
  + labs(title=expression(atop(bold("Inequality Is Increasing"), atop("Gini Coefficient", ""))))
  + labs(x="")
  + labs(y="")
  + annotate("text", label = "Source:World Bank Data", x = 2009, y = Inf, vjust = 61, size=4)
)

# Overide clipping
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)

谢谢

4

1 回答 1

0

我对你的代码做了很多试验。当您想要字幕时,您的原始代码效果很好。但是你牺牲的是左对齐。如果你想要左对齐,你可以做类似的事情ggtitle("Inequality Is Increasing\nGini Coefficient")。但是,例如,您会牺牲字体样式。这是一个权衡。我能想到的唯一解决方案是将副标题与主标题分开。我宁愿把细微之处当作文本。因此,我使用了注释。我使用 x 和 y 值来确定字幕的最佳位置。这纯粹是实验性的和乏味的。但是,我认为这是我能为你提供的最好的。我希望这能满足您的要求。

# Plot
p <- (ggplot(mydata, aes(x=x, y=y))
  + geom_point(size=3,alpha=.50)
  + geom_smooth(method="lm",formula=y~poly(x,2,raw=T),se=F,size=1)
  + theme_economist(base_size=12, base_family="Avenir")
  + ggtitle("Inequality Is Increasing")
  + annotate("text", x = 1992.25, y = 3.2, label = "Gini Coefficient", fontface = 3)
  + labs(x="")
  + labs(y="")
  + annotate("text", label = "Source:World Bank Data", x = 2009, y = Inf, vjust = 61, size=4)
)
于 2014-08-22T06:54:34.403 回答