21

次のような人口ピラミッドのように、1 つのプロットに 2 つの変数をプロットしたいと考えています。

プロット

このプロットはほぼ完成していますが、完全ではありません。その理由を次に示します。

次のコードでこのプロットを作成しました。

DATA <- data.frame(
    state = c("AK", "TX", "CA", "MT", "NM", "AZ", "NV", "CO", "OR", "WY", "MI", "MN", "UT", "ID", "KS", "NE", "SD", "WA", "ND", "OK"),
    sales_staff = c(20,30,40,10,15,35,18,25,22,7,12,22,3,4,5,8,14,28,24,32)
)

set.seed(1)
DATA$sales <- DATA$sales_staff * 50 + (runif(nrow(DATA)) * 1000)

# Order the state factor by number of sales staff so that it is plotted in that order
DATA$state <- factor(DATA$state, levels = DATA[order(DATA$sales_staff),"state"])

2 つのプロットを連続して「接着」したいので、http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/の multiplot() 関数を逐語的に使用します。

(簡潔さと明確さのために、ここではその関数のコードを再現しません)

最終的なプロットの私のコードは次のとおりです。

library(ggplot2)

g1 <- ggplot(data = DATA, aes(x = state, y = sales_staff)) +
  geom_bar(stat = "identity") + ggtitle("Number of sales staff") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank(), plot.margin = unit(c(1,0,1,0), "mm")) +
  scale_y_reverse() + coord_flip()

g2 <- ggplot(data = DATA, aes(x = state, y = sales)) +
  geom_bar(stat = "identity") + ggtitle("Sales (x $1000)") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank(), plot.margin = unit(c(1,5,1,0), "mm")) +
  coord_flip()

multiplot(g1, g2, cols = 2)

わかった。では、このプロットの何が問題なのですか?

  • 左プロットの右軸の目盛りを取得する必要があります。その方法がわかりません。
  • 2 つのプロットは幅が異なります。これは、中央の状態が右のプロットの軸ラベルであり、そのプロットのためにスペースの一部を使用しているためです。

このプロットを「生産品質」にするのにレンガの壁にぶつかりました。次のステップは、2 つのプロットの間に別の 3 番目の列として軸ラベルを描画することだと考えているため、これについて間違った方法で行っているのではないかと考え始めています。(これを行う方法はまだわかりません)。これにより、「等しいサイズ」の問題が解決され、「状態」のタイトルを追加できるようになります。しかし、もっと簡単な方法があるのだろうかと思わずにはいられません...

アドバイスや支援をいただければ幸いです。

4

1 に答える 1