2016-08-29 12 views
2

ggplot2を使用して時系列データをプロットすることができます。しかし、季節情報と時系列データを強調したいと思います。ここで時系列データ用の複数のx軸ラベル

は私のコードです:

library(zoo) 
library(ggplot2) 

a <- read.table(text = " 
     Season Quarter Sales 
     Season1 2014Q1 20 
     Season1 2014Q2 40 
     Season1 2014Q3 60 
     Season1 2014Q4 80 
     Season2 2015Q1 30 
     Season2 2015Q2 40 
     Season2 2015Q3 80 
     Season3 2015Q4 90 
     Season3 2016Q1 100 
     Season3 2016Q2 120 
     Season3 2016Q3 140 
    ", header = TRUE, sep = "") 
a$Quarter<-as.yearqtr(a$Quarter) 
a$Quarter<-as.Date(a$Quarter) 

ggplot(data=a,aes(x=Quarter, y=Sales)) + 
     geom_line() 

これは私が時系列データを描画することが可能だということに適しています。今 plot1

、私はこれを行う1つの方法はcolorまたはlinetypeを使用するのだろうなど、シーズン1を構成するものをラベルにしたい2。しかし、時系列の連続性が損なわれるため、これは機能していないようです。一方

# doesn't work... 
ggplot(data=a,aes(x=Quarter, y=Sales)) + 
     geom_line(aes(linetype=Season)) 

plot2

、私はExcelがわずか2回のクリックでこのグラフをプロットする方法が好きです。これは、日付とともにx軸の季節情報を示す美しいグラフを作成します。本質的に3層のx軸を作成します。

plot3

私はこのトピックに関する二つの質問があります。

質問1:ggplotを使用して、どのように私は(休憩なしつまり)連続グラフを作成するためにggplotlinetype(またはcolor)を使用することができますか?私はlinetypeよりもcolorを好むでしょう。 例として、コメントに答えるために、ここでは別のデータセットを使って作成したグラフを示します。

df <- data.frame(x = 1:3, y = 1:3, z = c(1,3,5)) 
ggplot(df, aes(x, y, color = factor(z))) + 
     geom_line(aes(group = 1)) 

私は、時系列データのための行動の上に複製することができません。ここ は、私は上記のコードから得たグラフです:

enter image description here

質問2:ggplotを使用して、どのように私はマルチレベルx軸を作成することができます(Excelが私のためにしたものと同様の)季節を示しました情報の日付? {私が作成したExcelグラフを見てください}このオプションを使って凡例を作成したくありません。また、x-値とy-値を調整して再調整することによって、これらのマルチレベルラベルを配置する方法をannotate(またはおそらくgeom_text)の方法で適用することで、ハッキング方法を使用しないと分かります。これは、プログラミング言語を使用してグラフを描画するという目的を破るためであり、データが変更されても機能しません。

ご不明な点がありましたら、お知らせください。私はあなたの考えを感謝します。私はggplot2と絶対初心者です。 ExcelとSTATAからggplotに移行してからわずか5日間です。私の質問があまりにも基本的なものであれば、謝罪します。

私はこのトピックをSOで研究しましたが、十分近いものは見つかりませんでした。たとえば、this threadはダニを変更することについて話しますが、私が探しているものではありません。

+0

あなたの意図は明らかですが、あなたの 'linetype'例えば特に、' ggplot2'は正しいことをやっている - 例えば、どのような 'linetype'はあなたでしょうシーズン1と2をつなぐセグメントがあると思いますか? – tchakravarty

+0

@ tchakravartyご意見ありがとうございます。さて、私は色を使って連続性を示すことができれば、助けになると思っています。私は上記の説明を追加します。 – watchtower

+0

同じロジックがカラーにも適用されます。私はあなたの最善の策は、Excelがあなたのために作成している階層軸を試して複製することだと思います。 SO [here](http://stackoverflow.com/q/18165863/1414455)と[here](http://stackoverflow.com/q/5704725/1414455)のいくつかの以前のソリューションがあります。 – tchakravarty

答えて

2

あなたは非常に簡単にこのようなあなたのExcelのグラフの意図を再作成することができますラインでの休暇に

library(plyr) 
ss <- ddply(a, .(Season), summarize, date = min(Quarter)) 
ss$date <- as.numeric(ss$date) 

ggplot(data=a,aes(x=Quarter,y=Sales)) + 
    geom_line() + 
    geom_vline(data = ss, aes(xintercept = date), colour = "grey50") + 
    geom_text(data = ss, aes(x = as.Date(date), y = Inf, label = Season), 
      hjust = -0.1, vjust = 1.1) 

enter image description here

つの回避策連続灰色の線をプロットする色をされて使用した場合カラーラインに加えて:

ggplot(data=a,aes(x=Quarter,y=Sales)) + 
    geom_line(colour = "grey80") + 
    geom_line(aes(colour = Season)) + 
    geom_vline(data = ss, aes(xintercept = date), colour = "grey50") + 
    geom_text(data = ss, aes(x = as.Date(date), y = Inf, label = Season), 
      hjust = -0.1, vjust = 1.1) 

enter image description here

1

回避策は、Season列に変更がある場合に、データフレームを変更することです。つまり、データフレームに行を追加することです。この方法のように :

library("plyr") 

# add additional lines at end of every season 
tmp <- ddply(a, "Season", 
      function(x) { 
       x[nrow(x)+1, "Season"] <- x[nrow(x), "Season"] 
       x 
      }) 
# fill NA values with values of next season 
tmp$Quarter <- na.locf(tmp$Quarter, fromLast=TRUE, na.rm=FALSE) 
tmp$Sales <- na.locf(tmp$Sales, fromLast=TRUE, na.rm=FALSE) 
tmp <- na.omit(tmp) # drop last line 
tmp 
#  Season Quarter Sales 
# 1 Season1 2014-01-01 20 
# 2 Season1 2014-04-01 40 
# 3 Season1 2014-07-01 60 
# 4 Season1 2014-10-01 80 
# 5 Season1 2015-01-01 30 
# 6 Season2 2015-01-01 30 
# 7 Season2 2015-04-01 40 
# 8 Season2 2015-07-01 80 
# 9 Season2 2015-10-01 90 
# 10 Season3 2015-10-01 90 
# 11 Season3 2016-01-01 100 
# 12 Season3 2016-04-01 120 
# 13 Season3 2016-07-01 140 

ggplot(data=tmp, aes(x=Quarter, y=Sales)) + 
     geom_line(aes(colour=Season, linetype=Season)) 

ggplot output

関連する問題