2017-10-17 2 views
-2

scale_x_date(date_labels="%b"...)を使用すると、各月の最初の3文字を含む目盛りラベルが作成されます。毎月の最初の手紙を入れる方法はありますか?したがって、"Jan Feb March..."の代わりに、ラベルは"J F M..."になります。毎月の最初の文字でggplot2 x軸の月ラベルを作成する

例は次のとおりです。月ラベルが重複しているため、ラベルを最初の文字に変更できることを期待していました。

enter image description here

library(lubridate) 
library(ggplot2) 


set.seed(2) 
df = data.frame(Date=seq(as.Date("2010-01-01"),as.Date("2015-12-31p 
                "), by="1 day")) 
df$value = cumsum(rnorm(nrow(df))) 


p = ggplot(df, aes(Date, value)) + 
    geom_vline(xintercept=as.numeric(df$Date[yday(df$Date)==1]), colour="grey60") + 
    geom_line() + 
    scale_x_continuous(labels = year_labels <- rep(c('J','F','M','A','M','J','J','A','S','O','N','D'),5)) + 
    theme_bw() + 
    theme(panel.grid.minor.x = element_blank()) + 
    labs(x="") 
p 
は私がライン scale_x_date(date_labels="%b", date_breaks="month", expand=c(0,0)) scale_x_continuous(labels = year_labels <- rep(c('J','F','M','A','M','J','J','A','S','O','N','D'),5))

に変更しようとしましたが、これは以下のエラー

as.Date.numeric(値)でのエラー生成:「原点'を供給する必要があります

+0

あなたは –

+0

あなたの例は –

+0

再現性がない、私はちょうどライン 'geom_vline(xintercept = as.numeric(DFの$日[yday(DFの$日)== 1]をスキップ再現性の例を提供してくださいすることができます)、色=」 grey60 ")'私は*デコレーションの一部だけと考えており、それはうまく機能しました – Marco

答えて

1

私はそれを行う方法を見つけました。誰も同じ出力を生成する簡単な方法を知っていますか?

set.seed(2) 
df = data.frame(Date=seq(as.Date("2010-01-01"),as.Date("2015-12-31"), by="1 day")) 
df$value = cumsum(rnorm(nrow(df))) 

year_labels <- rep(c('J','F','M','A','M','J','J','A','S','O','N','D')p,6) 


# The plot we'll start with 
p = ggplot(df, aes(Date, value)) + 
    geom_vline(xintercept=as.numeric(df$Date[yday(df$Date)==1]), colour="grey60") + 
    geom_line() + 
    # scale_x_continuous(labels = year_labels) + 
    scale_x_date("Date",breaks = c(seq(from=as.Date("2010-01-01"),to=as.Date("2015-12-31"),by="month")), 
       labels = year_labels) 
p 

enter image description here

1

私は素敵な方法は、パッケージscalesからpretty_breaksを使用することだと思います。それはあなたが要求する出力を生成しませんが、私は思ったより良いと任意の長さのデータをスムーズに動作します。ここで

library(ggplot2) 
library(scales) 

set.seed(2) 
df = data.frame(Date=seq(as.Date("2010-01-01"),as.Date("2014-12-31p 
               "), by="1 day")) 
df$value = cumsum(rnorm(nrow(df))) 

p = ggplot(df) + 
    geom_line(aes(Date, value), size=0.1) + 
    scale_y_continuous(name= "Title of y [units]")+ 
    scale_x_date(breaks=pretty_breaks(), date_minor_breaks="1 month") + 
    theme_bw() 
p 

enter image description here

enter image description here

私はヶ月 enter image description here

ニースとシンプルの過剰を避けるためにdate_minor_breaks="6 months"を変更!

+0

ありがとうMarco。それは私の現在の仕事にはあまり役に立っていませんが、将来私はあなたのポストを参照すると思います。あなたのプロットは素敵に見え、私はスケールパッケージを調べなければならないでしょう。 –

関連する問題