2011-03-02 9 views
8

次のシンプルな日付 - 値ペアのデータフレームがあります。シーケンスの一部の日付が1月12日から1月14日に欠落しています。ポイントをプロットすると、これらの欠落した日付がx軸に表示されますが、その日付に対応するポイントはありません。私は、これらの欠けている日付がx軸に現れないようにしたいので、点列には改行がありません。これを行う方法に関する提案はありますか?ありがとう!R + ggplot2:x軸から欠けている日付を隠すには?

dts <- c(as.Date(c('2011-01-10', '2011-01-11', '2011-01-15', '2011-01-16'))) 
df <- data.frame(dt = dts, val = seq_along(dts)) 
ggplot(df, aes(dt,val)) + geom_point() + 
     scale_x_date(format = '%d%b', major='days') 

enter image description here

答えて

8
その後要因に日付データを回し

。現時点では、ggplotは、データが入っているという意味でデータを解釈しています。連続した日付のスケールです。

require(ggplot2) 
dts <- as.Date(c('2011-01-10', '2011-01-11', '2011-01-15', '2011-01-16')) 
df <- data.frame(dt = dts, val = seq_along(dts)) 
ggplot(df, aes(dt,val)) + geom_point() + 
     scale_x_date(format = '%d%b', major='days') 

生成

df <- data.frame(dt = factor(format(dts, format = '%d%b')), 
        val = seq_along(dts)) 
ggplot(df, aes(dt,val)) + geom_point() 

対: enter image description here

をあなたが何を望むかということですあなたはその規模を望んでいない、あなたがカテゴリスケールがしたいですか?

+0

@Gavin、おかげで...しかし、それはされた日付を変更します表示される:私は10Janから16Janを持っていた、今私たちは2Janから5Janを得る。それを修正する方法はありますか?私は日付を文字列として扱い、日付の意味を完全に失うと思うが、日付の意味を失わない方法があるのだろうか? –

+0

しかし、それらは連続した日付であり、元の質問からのものではありません。 –

+0

私は気づいた、元のスケールごとに日付を書式設定するのを忘れてしまった。私のせいで、今答えを見てください。 –

5

最初の質問は、なぜそれをしたいのですか?座標軸が座標でない場合、座標ベースのプロットを表示することはありません。本当にこれをやりたければ、要素に変換することができます。あなたは順序が要因に任意であるとして、あなたがそれ命じた要因作る場合を除き、注意しなければならない要因で

dts <- c(as.Date(c('31-10-2011', '01-11-2011', '02-11-2011', 
      '05-11-2011'),format="%d-%m-%Y")) 
dtsf <- format(dts, format= '%d%b') 
df <- data.frame(dt=ordered(dtsf,levels=dtsf),val=seq_along(dts)) 
ggplot(df, aes(dt,val)) + geom_point() 

enter image description here

:しかし順序のため注意してください。要素はデフォルトでアルファベット順に並べ替えられているため、一部の日付形式で問題が発生する可能性があります。だからあなたがしていることに注意してください。あなたのアカウントに注文を取るしていない場合は、次のようになります。

df <- data.frame(dt=factor(dtsf),val=seq_along(dts)) 
ggplot(df, aes(dt,val)) + geom_point() 

enter image description here

+0

週末にはデータを持たない財務時系列ではよくあることですから、週末がある場所では区切りをつけるのは視覚的には良いことではありません。 –

+0

@Prasad:そうだね。私はむしろ、X軸上で連続していない連続的な機能の印象を与えるように、X軸に「就業日」のようなものを追加したいと思います。ニックピッキングのように聞こえるが、かなり混乱するかもしれない。 –

+0

注文要因の+1点 –

7

を私はこれを行うパッケージを作りました。それはbdscaleと呼ばれ、それはCRANgithubです。恥知らずのプラグ。あなたの例を複製するために

> library(bdscale) 
> library(ggplot2) 
> library(scales) 
> dts <- as.Date(c('2011-01-10', '2011-01-11', '2011-01-15', '2011-01-16')) 
> ggplot(df, aes(x=dt, y=val)) + geom_point() + 
    scale_x_bd(business.dates=dts, labels=date_format('%d%b')) 

replicate example

しかし、あなたはおそらくしたいことは、x軸上の有効な日付使ってデータをプロット、その後、既知の有効な日付を読み込むことです:

> nyse <- bdscale::yahoo('SPY') # get valid dates from SPY prices 
> dts <- as.Date('2011-01-10') + 1:10 
> df <- data.frame(dt=dts, val=seq_along(dts)) 
> ggplot(df, aes(x=dt, y=val)) + geom_point() + 
    scale_x_bd(business.dates=nyse, labels=date_format('%d%b'), max.major.breaks=10) 

Warning message: 
Removed 3 rows containing missing values (geom_point). 

警告は、それが3日付除去したことを通知されています

  • 15 =土曜日
  • 16日=日曜日
  • 17 = MLK日
+1

ほんの少し修正しました。これはライブラリ(ライブラリではありません)を作成する*パッケージ*を作成しました –

+1

あなたのために_package_を得ました**ここ、**バディ。ああ。しかし、あなたは正しいです、私は修正します。 – dvmlls

関連する問題