2016-10-08 16 views
5

Bazı tatil tarihlerim ve haftada bir miktar veri var. Verileri çiziyorum ve X ekseni etiketlerini sadece tatil masamdan bir tatil olduğunda görünmesini sağlamak istiyorum. Etiketlerin geri kalanı gizlenmelidir. İhtiyacım olan şey, isimlerin yılın haftaları olduğu ve değerlerin istediğim dizeler olduğu bir listedir, fakat bu programın nasıl üretileceğini anlayamıyorum.Yılbaşına göre tatil etiketlerini uygulayın

library(tidyverse) 
library(lubridate) 

holiday_dates = c(
    "2016-01-01", 
    '2016-01-18', 
    '2016-02-15', 
    '2016-05-08', 
    '2016-05-30', 
    '2016-06-19', 
    '2016-07-04', 
    '2016-09-16', 
    '2016-10-10', 
    '2016-11-11', 
    '2016-11-24', 
    '2016-12-25' 
) 
holiday_names = c(
    'New Years Day', 
    'Martin Luther King Day', 
    'Presidents Day', 
    'Mothers Day', 
    'Memorial Day', 
    'Fathers Day', 
    'Independence Day', 
    'Labor Day', 
    'Columbus Day', 
    'Veterans Day', 
    'Thanksgiving', 
    'Christmas Day' 
) 
holidays = data.frame(Date = as.Date(holiday_dates), Holiday = holiday_names) %>% 
    mutate(WeekOfYear = week(Date)) 

# can't figure out how to make this a list with names generates from the WeekOfYear column 
holiday_labels = data.frame(WeekOfYear = seq(1,52)) %>% 
    left_join(holidays) %>% 
    .$Holiday 

my_data %>% 
    ggplot(aes(x=WeekOfYear, y=Gross, group=WeekOfYear)) + 
    geom_line() + 
    scale_x_discrete(
    names = holiday_labels, 
    na.value = "" 
) 

cevap

7
  • Kullanım scale_x_continuous yerine scale_x_discrete
  • ilgili metin etiketleri ve bunları istediğiniz tarihleri ​​ile, labels ve breaks hem ayarlayın. Özellikle, molalar için, verilerinizle aynı ölçeğe koymak için week(as.Date(holiday_dates)) kullanın. Örneğin

: Ayrıca okunabilir hale getirmek için, x-ekseni etiketleri döndürülür

data_frame(WeekOfYear = 1:52, Gross = rnorm(52)) %>% 
    ggplot(aes(x = WeekOfYear, y = Gross)) + 
    geom_line() + 
    scale_x_continuous(
    labels = holiday_names, 
    breaks = week(as.Date(holiday_dates)) 
) + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) 

not edin.

+0

Bu özellikle metni döndürerek iyi bir başlangıç. Bununla birlikte grubu haftada bir kez tutmam önemlidir. Gerçek arsa bir çizgi grafik değil, sadece mümkün olduğunca az yapmak istedim. –

+0

@NickLarsen Bkz. Ayrıca, haftaya göre özetlemek, ancak bir tarih olarak tutmak istiyorsanız, 'round_date (tarih, "hafta") ' –

+0

Awesome'ı kullanabilirsiniz, bir ton teşekkürler. –