【发布时间】:2016-05-20 12:45:13
【问题描述】:
我试图复制这个 chart 来自经济学人(左边那个)。该图表在左侧 y 轴上绘制了俄罗斯的亿万富翁数量,在右侧绘制了世界其他地区的亿万富翁数量。
- 为俄罗斯亿万富翁创建图表 (
p1)。 - 为其他人创建图表 (
p2)。 - 使用Kohske 的代码将
p1和p2组合成一个双y 轴图表。
数据:(billionaire.csv的内容)
,Russia,World
1996,0,423
1997,4,220
1998,1,221
1999,0,298
2000,0,322
2001,8,530
2002,6,466
2003,17,459
2004,25,562
2005,27,664
2006,33,760
2007,53,893
2008,87,1038
2009,32,761
2010,62,949
2011,101,1109
2012,96,1130
2013,110,1317
2014,111,1535
2015,88,1738
代码:
library(ggplot2)
library(gtable)
library(grid)
library(extrafont) # for Officiana font
dat <- read.csv("billionaire.csv")
rus <- dat[,1:2]
world <- dat[,-2]
grid.newpage()
p1 <- ggplot(rus, aes(X, Russia)) + geom_line(colour = "#68382C", size = 1.5) + ggtitle("Number in Russia") +
ylim(0, 200) + labs(x="",y="") +
theme(#plot.margin = unit(c(2,1,0,0), "cm"),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(color = "gray50", size = 0.5),
panel.grid.major.x = element_blank(),
text=element_text(family="ITCOfficinaSans LT Book"),
axis.text.y = element_text(colour="#68382C", size = 14),
axis.text.x = element_text(size = 14),
axis.ticks = element_line(colour = 'gray50'),
plot.title = element_text(hjust = -0.17, vjust=2.12, colour="#68382C", size = 14, family = "ITCOfficinaSans LT Bold"))
p2 <- ggplot(world, aes(X, World)) + geom_line(colour = "#00a4e6", size = 1.5) + #ggtitle("Rest of world") +
ylim(0, 2000) + labs(x="",y="") +
theme(#plot.margin = unit(c(2,1,0,0), "cm"),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
text = element_text(family="ITCOfficinaSans LT Book"),
axis.text.y = element_text(colour="#00a4e6", size=14),
axis.text.x = element_text(size=14),
axis.ticks = element_blank(),
plot.title = element_text(hjust = 0.2, vjust=2.12, colour="#00a4e6", size = 14, family = "ITCOfficinaSans LT Bold"))
# Combining p1 and p2
g1 <- ggplot_gtable(ggplot_build(p1))
g2 <- ggplot_gtable(ggplot_build(p2))
pp <- c(subset(g1$layout, name == "panel", se = t:r))
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t,
pp$l, pp$b, pp$l)
ia <- which(g2$layout$name == "axis-l")
ga <- g2$grobs[[ia]]
ax <- ga$children[[2]]
ax$widths <- rev(ax$widths)
ax$grobs <- rev(ax$grobs)
g <- gtable_add_cols(g, g2$widths[g2$layout[ia, ]$l], length(g$widths) - 1)
g <- gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)
ggsave("plot.pdf",g, width=5, height=5)
要使用我选择的字体和颜色来格式化文本“俄罗斯的数字”和“世界其他地区”,我将它们放在ggtitle 中。但是在步骤 3 中将图表组合在一起后,p2 的标题不见了,所以这就是我得到的全部
我想要实现的是
1. 以我选择的颜色和字体系列(不是默认的 Helvetica)添加文本“世界其他地区”。
2.在x轴上添加标签1996。
感谢任何帮助。谢谢!
编辑:添加了数据集和完整代码。
EDIT2:仅供参考,我从这里获得了所有的 Officiana 字体:http://people.oregonstate.edu/~hanshumw/Specie%20I.D./Signage%20Backup/FONT%20Officina%20full/
EDIT3:好的,我终于如何通过在网格级别摆弄情节来使其工作
g$grobs[[8]]$children$GRID.text.526$label <- c("Number in Russia", "Rest of World")
g$grobs[[8]]$children$GRID.text.526$gp$col <- c("#68382C","#00a4e6")
g$grobs[[8]]$children$GRID.text.526$x <- unit(c(-0.175, 0.774), "npc")
将此块放在ggsave(...) 之前,结果如下:
【问题讨论】:
-
从 "+ #ggtitle("Rest of world")" 中删除 # 可能会有所帮助。
-
请注意,在
ggthemes包中,有一个theme_economist()。这可能对您的问题没有帮助,但可能有助于节省一些输入。 -
@coffeinjunky 像
theme_excel吗? -
@RHA:我已经试过了,但什么也没发生,所以我把它注释掉了。
-
请在您的帖子中包含重现该图所需的所有数据和代码,因此数据(不是链接)以及 Kohske 的代码。我认为他不会介意(只要哈德利不会看到)