2017-01-13 8 views
1

私は次の問題を抱えています。あなたはx軸が正しく整列されていない見ることができるようggplot:x軸に2つの時系列プロットを揃える方法は?

enter image description here

を与えるこの(簡単な)例

library(grid) 
library(gridExtra) 
library(gtable) 
library(dplyr) 
library(lubridate) 
options("digits.secs"=3) 

time1 = c('2013-01-03 22:04:21.549', '2013-01-03 22:04:22.549', '2013-01-03 22:04:23.559', '2013-01-03 22:04:24.559') 
value1 = c(1,2,3,4) 
data1 <- data_frame(time1, value1) 
data1 <- data1 %>% mutate(time1 = ymd_hms(time1)) 

time2 = c('2013-01-03 22:04:21.800', '2013-01-03 22:04:22.549', '2013-01-03 22:04:25.559', '2013-01-03 22:04:26.559') 
value2 = c(1,2,3,4) 
data2 <- data_frame(time2, value2) 
data2 <- data2 %>% mutate(time2 = ymd_hms(time2)) 

g1 <- ggplot(data1, aes(x = time1, y = value1)) +geom_point() 
g2 <- ggplot(data2, aes(x = time2, y = value2)) +geom_point() 


graph_1 <- arrangeGrob(g1, g2, ncol=1) 
grid.draw(graph_1) 

を考えてみましょう。 これを行うにはどのようなアイデアですか? How to align two plots with ggplot?のような代替ソリューションはここでは機能しません。

多くの感謝!

答えて

2

両方のプロットに同じ制限を使用するか(最初)、facet_gridを使用してプロットの範囲を調整します(秒)。

# first method 
mx <- ymd_hms("2013-01-03 22:04:21.000") 
mn <- ymd_hms("2013-01-03 22:04:27.000") 
grid.arrange(g1 + scale_x_datetime(limits=c(mx, mn)), 
      g2 + scale_x_datetime(limits=c(mx, mn))) 

enter image description here

# second method 
names(data1) <- c("time", "value") 
names(data2) <- c("time", "value") 
df <- bind_rows(first=data1, second=data2, .id="group") 
ggplot(df, aes(x=time, y=value)) + geom_point() + facet_grid(group ~ .) 

enter image description here

+0

HI @Jasあなたが「y軸」の単位に異なる桁数が含まれていると、あなたの素晴らしい(最初の)解決策が壊れます。 'value2 = c(100,200,300,400)'と言ってください。あなたはそれを修正する方法を知っていますか? –

+1

私は、より良い方法は、 'facet_grid(group〜。、scales =" free_y ")'で2番目の方法を使うことだと思います。まず最初に、私が思いつく方法は、 'scale_y_continuous(labels = function(x){paste0(" 00 "、x)})'によってyラベルの長さを調整することです。 – JasonWang

+1

またはスペースが何であるか把握し、マージンを調整するために 'theme'を使用する必要があります。 – JasonWang

1

あなたは、データの範囲に両方のプロットの制限を設定することができます

xmin <- ymd_hms(min(time1,time2)) 
xmax <- ymd_hms(max(time1,time2)) 

g1 <- ggplot(data1, aes(x = time1, y = value1)) + geom_point() + 
    theme(axis.title.x = element_blank()) + xlim(xmin, xmax) 

g2 <- ggplot(data2, aes(x = time2, y = value2)) + geom_point() + 
    xlim(xmin, xmax) 

enter image description here

関連する問題