2017-04-12 19 views
0

は、私たちは、次のRコードを考えてみましょう異なる範囲を持つ、1つのグラフに複数の二つの曲線を描く:ここ曲線は

x=seq(1,10,1) 
y1=runif(10,0,1) 
y2=runif(10,0,1) 
y3=runif(10,100,200) 
matplot(x,cbind(y1,y2,y3),type="l") 

y1y2の範囲がy3のそれとは異なっています。その結果、matplotを作成すると、y1y2のカーブは、直線の下になりますが、y3に対応するカーブは問題ありません。

同じグラフ内の範囲が大きく異なる曲線を適切にプロットできる方法はありますか?

答えて

1

最も簡単な方法は、y軸のために対数スケールを使用することです:

matplot(seq(1, 10, 1), cbind(runif(10, 0, 1), runif(10, 0, 1), runif(10, 100, 200)), 
     type = "l", log = "y") 

結果: enter image description here

あなたはggplot2を用いて同様の結果を得ることができます。

library(tidyr) 
library(ggplot2) 
df1 = data.frame(x = seq(1, 10, 1), 
       y1 = runif(10, 0, 1), 
       y2 = runif(10, 0, 1), 
       y3 = runif(10, 100, 200)) 

df1 %>% 
    gather(y, value, -x) %>% 
    ggplot(aes(x, value)) + geom_line(aes(color = y)) + scale_y_log10() 

結果: enter image description here

あなたは軸をログに記録したくない場合は、別のオプションは、無料の軸のスケールを持つ面である:

df1 %>% 
    gather(y, value, -x) %>% 
    ggplot(aes(x, value)) + geom_line() + facet_grid(y ~ ., scales = "free") 

結果: enter image description here

1

約2と単一のプロットをプロットするの良い例の多くがあります。異なるスケール、例えばhttps://www.r-bloggers.com/r-single-plot-with-two-different-y-axes/しかし、通常はpar(new=t)の使用を必要とします。通常は少し微調整する必要があります。つまり、常にデータの探索に直感的ではありません。

私は、同じ画像上の異なるフレームで行をプロットするためにggplotfacet_wrapを使用することをお勧めします:

library(ggplot2) 
out <- data.frame(x=rep(x,3), y=c(y1, y2, y3), gp=unlist(lapply(c("y1", "y2", "y3"), rep, 10))) 
ggplot(out, aes(x, y)) + geom_line()+ facet_wrap(~gp, scales="free_y", nrow=3) 

enter image description here