Выровнять подзаголовок в диаграмме по левому краю, используя ggplot
Кто-нибудь знает, как выровнять подзаголовок в этой таблице, которую я сделал? Не женат ни на одном из методов, которые я использовал, кроме использования 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 ответ
Я экспериментировал с твоими кодами совсем немного. Ваш оригинальный код хорошо работает, когда вы хотите иметь субтитры. Но то, чем вы жертвуете, это выравнивание по левому краю. Если вы хотите выравнивание по левому краю, вы можете сделать что-то вроде 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)
)