使用ggplot在图表中左对齐子标题

时间:2014-08-22 02:25:09

标签: r ggplot2 formatting leftalign

任何人都知道如何在我制作的图表中左对齐子标题?与我使用的任何方法都没有结合,除了使用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)

由于

1 个答案:

答案 0 :(得分: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)
)