6

私はエコノミストからこのチャートを再現しようとして いました (左側のもの)。このグラフは、ロシアの億万長者の数を左側の y 軸に、その他の地域の億万長者の数を右側にプロットしています。

  1. ロシアの億万長者のグラフを作成します ( p1)。
  2. その他のグラフを作成します ( p2)。
  3. Kohskeによるコードを使用して、p1p2を 2 つの 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)

「Number in Russia」と「Rest of the world」のテキストを、選択したフォントと色で書式設定するために、ggtitle. しかし、手順 3 でチャートを結合した後、 のタイトルp2が見つからないため、これだけが得られました

ここに画像の説明を入力

私が達成しようとしているのは
、1. テキスト「Rest of world」を、選択した色とフォント ファミリ (デフォルトの Helvetica ではありません) で
追加することです。 2. x 軸にラベル 1996 を追加します。

どんな助けでも大歓迎です。ありがとう!

編集: データ セットと完全なコードが追加されました。 EDIT2: 参考までに、ここからすべてのOfficiana
フォントを取得しました: http://people.oregonstate.edu/~hanshumw/Specie%20I.D./Signage%20Backup/FONT%20Officina%20full/
グリッドレベルでプロットをいじって機能させる

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(...)に置くと、結果は次のようになります。

4

4 に答える 4

4

これは、ggplot ではなく R ベース グラフィックスを使用したソリューションです。同じフォントがインストールされているシステム間でのみ移植可能であるため、フォントファミリは変更しませんでした (ここには Officiana がありません)。familyそのために引数を追加するのは簡単mtextです。

par(mar = c(3, 3, 3, 3), las = 1)
plot(tmp[,c(1,3)], type = 'n', axes = FALSE, ylim = c(0, 2000))
abline(h = c(0, 500, 1000, 1500, 2000), col = "grey")
points(tmp[,c(1,3)], type = 'l', col = "blue", lwd = 2)
points(x = tmp[,1], y = tmp[,2] * 10, type = 'l', col = "brown", lwd = 2)
axis(side = 4, at = c(0, 500, 1000, 1500, 2000), tick = FALSE,
     col.axis = "blue", line = 1, hadj = 1)
axis(side = 2, at = c(0, 500, 1000, 1500, 2000), tick = FALSE,
     col.axis = "brown", hadj = 1,
     labels = c(0, 50, 100, 150, 200))
axis(side = 1, at = c(1996, 2000, 2005, 2010, 2015), lwd = 0, line = -1,
     lwd.ticks = 2, col.ticks = "grey")
mtext("Number in Russia", side = 2, col = "brown", at = 2150, line = 2.5,
      adj = 0)
mtext("Rest of World", side = 4, col = "blue", at = 2150, line = 2,
      adj = 1)

プロット出力

于 2016-05-20T18:36:41.393 に答える