web-dev-qa-db-ja.com

2つのプロット(ggplot)を1つのプロットに組み合わせる方法は?

Rを使用すると、2つのggplotを一緒に(つまり、同じプロット上に)配置できますか? 2つの異なるデータフレームのトレンドを表示し、それらを1つに並べるのではなく、それらを1つのプロットにまとめて、そのうちの1つの色(黒い点)のみを変更したいと思います。

具体的には、次の2つのビジュアルがあります。

ggplot(visual1, aes(ISSUE_DATE,COUNTED)) + geom_point() + geom_smooth(fill="blue", colour="darkblue", size=1)

そして

ggplot(visual2, aes(ISSUE_DATE,COUNTED)) + geom_point() + geom_smooth(fill="red", colour="red", size=1)

これらは次のようになります(どちらにも黒い点があり、そのうちの1つを別のものに変更する必要があります)。

enter image description here

そして

enter image description here

43
adhg

現在のデータを設定して単一の結合プロットを作成すると、次のようになります

p <- ggplot() +
      # blue plot
      geom_point(data=visual1, aes(x=ISSUE_DATE, y=COUNTED)) + 
      geom_smooth(data=visual1, aes(x=ISSUE_DATE, y=COUNTED), fill="blue",
        colour="darkblue", size=1) +
      # red plot
      geom_point(data=visual2, aes(x=ISSUE_DATE, y=COUNTED)) + 
      geom_smooth(data=visual2, aes(x=ISSUE_DATE, y=COUNTED), fill="red",
        colour="red", size=1)

ただし、プロットする前にデータセットを組み合わせることができる場合、ggplotは自動的に凡例を表示し、一般的にコードは少しきれいに見えます

visual1$group <- 1
visual2$group <- 2

visual12 <- rbind(visual1, visual2)

p <- ggplot(visual12, aes(x=ISSUE_DATE, y=COUNTED, group=group, col=group, fill=group)) +
      geom_point() +
      geom_smooth(size=1)
55
Stuples

ダミーデータ(これを提供してください)

visual1 = data.frame(ISSUE_DATE=runif(100,2006,2008),COUNTED=runif(100,0,50))
visual2 = data.frame(ISSUE_DATE=runif(100,2006,2008),COUNTED=runif(100,0,50))

組み合わせる:

visuals = rbind(visual1,visual2)
visuals$vis=c(rep("visual1",100),rep("visual2",100)) # 100 points of each flavour

今やる:

 ggplot(visuals, aes(ISSUE_DATE,COUNTED,group=vis,col=vis)) + 
   geom_point() + geom_smooth()

色などを好みに合わせて調整します。

enter image description here

22
Spacedman

それらを組み合わせるだけです。これは機能するはずですが、テストされていません。

p <- ggplot(visual1, aes(ISSUE_DATE,COUNTED)) + geom_point() + 
     geom_smooth(fill="blue", colour="darkblue", size=1)

p <- p + geom_point(data=visual2, aes(ISSUE_DATE,COUNTED)) + 
     geom_smooth(data=visual2, fill="red", colour="red", size=1)

print(p)
12
rrs