クラス日付のx軸に垂直geom_vlineを取得するにはどうすればよいですか?


109

私はGoogleのグループのハドレーのポストを見つけにもかかわらずPOSIXctgeom_vline、私はそれが成し遂げることができませんでした。私は時系列を持っており、たとえば1998年、2005年、2010年のような縦線を描きたいと思います。私は試したggplotし、qplot構文が、それでも私はどちらかまったく垂直線を見ていないか、縦線が非常に最初の垂直グリッドで描画され、シリーズ全体が右にやや奇妙にシフトしています。

gg <- ggplot(data=mydata,aes(y=somevalues,x=datefield,color=category)) +
      layer(geom="line")
gg + geom_vline(xintercept=mydata$datefield[120],linetype=4)
# returns just the time series plot I had before, 
# interestingly the legend contains dotted vertical lines

私の日付フィールドの形式は「1993-07-01」で、クラスはDateです。


1
データフレームの数行を追加して、例を試すことができますか?
サラウェスト

回答:


141

試してくださいas.numeric(mydata$datefield[120])

gg + geom_vline(xintercept=as.numeric(mydata$datefield[120]), linetype=4)

簡単なテストの例:

library("ggplot2")

tmp <- data.frame(x=rep(seq(as.Date(0, origin="1970-01-01"),
                            length=36, by="1 month"), 2),
                  y=rnorm(72),
                  category=gl(2,36))

p <- ggplot(tmp, aes(x, y, colour=category)) +
     geom_line() +
     geom_vline(xintercept=as.numeric(tmp$x[c(13, 24)]),
                linetype=4, colour="black")
print(p)

geom_vlineのプロット例


「as.numeric()」を実際に見つけるのは非常に難しいことに気づきました!ありがとう。
arno_v

3
geom_vline(aes(xintercept=as.numeric(x[c(13, 24)])), linetype=4, colour="black")より慣用的な、つまりのaes代わりに使用するのだろうかtmp$
デビッドアレンブルク2015年

1
このソリューションは機能しなくなりました。コードは `` `エラーを生成します:statのないレイヤーを作成しようとしました。rlang::last_error()エラーが発生した場所を確認するために実行します。「」
CoderGuy123

30

またgeom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)、日付が120行目にあるかどうかに関係なく、行をそのままにしておくこともできます。


13
私のマシン(R 3.2.2および1.0.1 ggplotとWin10)上で、私はそれを正しく整列するために取得するためにPOSIXctに日付を強制する必要があります: as.POSIXct(as.Date(c("2016-12-01","2017-02-01")))
Jthorpe

ありがとうJthorpe ..これは私のために働いた唯一のバージョンです
ColorStatistics

2

as.numericは私に働きます

ggplot(data=bmelt)+
  geom_line(aes(x=day,y=value,colour=type),size=0.9)+
  scale_color_manual(labels = c("Observed","Counterfactual"),values = c("1","2"))+
  geom_ribbon(data=ita3,aes(x=day, 
      y=expcumresponse, ymin=exp.cr.ll,ymax=exp.cr.uu),alpha=0.2) +
  labs(title="Italy Confirmed cases",
        y ="# Cases ", x = "Date",color="Output")+
  geom_vline(xintercept = as.numeric(ymd("2020-03-13")), linetype="dashed", 
                color = "blue", size=1.5)+
  theme_minimal()

コード出力

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.