2011-07-10 13 views
9

私はggplot2(R)にvalue〜dateをプロットしています。私は次のコードを持っています。あなたが見るように、ggplot2は自分のデータにあるx軸にブレークを追加します。データフレームにデータポイントがあるたびにxラベルを付けたいだけです。どうすればggplot2にmy.datesの値だけでブレークを表示させることができますか? scale_x_dateggplot2とRでのscale_x_dateのブレーク

一つのアプローチが数値として、x軸を治療し、休憩やラベル scale_x_continuous()と美学を設定することです
require(ggplot2) 
my.dates = as.Date(c("2011-07-22","2011-07-23", 
        "2011-07-24","2011-07-28","2011-07-29")) 
my.vals = c(5,6,8,7,3) 
my.data <- data.frame(date =my.dates, vals = my.vals) 
plot(my.dates, my.vals) 
p <- ggplot(data = my.data, aes(date,vals))+ geom_line(size = 1.5) 
p <- p + scale_x_date(format="%m/%d", ' ') 
p 

enter image description here

答えて

14

のための「休憩」引数が存在しないようです。

ggplot(my.data, aes(as.numeric(date), vals)) + 
    geom_line(size = 1.5) + 
    scale_x_continuous(breaks = as.numeric(my.data$date) 
        , labels = format(my.data$date, format = "%m/%d")) 

7/24から7/28の間のブレークは、私の意見では少し奇妙に見えますが。しかし、私はそれがあなたが望むものだと思いますか?私が誤解した場合は教えてください。

EDIT

上述したように、私は休憩が特異的背景に灰色のグリッドと、上記見た方法で興奮されませんでした。ここでは、長方形のグリッドを維持し、データがあるポイントにのみラベルを付ける方法があります。あなたはggplot呼び出しの中でこれをすべて行うことができますが、ggplotの外で処理する方が簡単だと思います。まず、日付に対応する数字のシーケンスを含むベクトルを作成します。

breaks labels 
1 15177 07/22 
2 15178 07/23 
3 15179 07/24 
4 15180  
5 15181  
6 15182  
7 15183 07/28 
8 15184 07/29 
:これは私たちのように見える何かを与える

xscale <- data.frame(breaks = seq(min(as.numeric(my.data$date)), max(as.numeric(my.data$date))) 
         , labels = NA) 

xscale$labels[xscale$breaks %in% as.numeric(my.data$date)] <- format(my.data$date, format = "%m/%d") 
xscale$labels[is.na(xscale$labels)] <- " " 

:その後、我々は、これらのエントリのx軸上にプロットされているから何かを防ぐために、適切なラベルを更新し、" "でNAエントリを置き換えますそして、このように規模に渡すことができ

scale_x_continuous(breaks = xscale$breaks, labels = xscale$labels)

+0

どうもありがとうございました。最初の部分は私の問題を解決しました。私はx軸をどのようにして休止させることができるのか分かりますか? – Mark

+2

@Mark - 'opts(panel.grid.major = theme_blank()、panel.grid.minor = theme_blank())'はこのトリックを行うべきです。 – Chase

+1

'ggplot2 1.0.0'で' Error:離散値が連続スケールに供給されました 'を投げます。 – MYaseen208