2012-07-11 17 views
7

Tôi đang tạo chuỗi thời gian bằng ggplot2 trong R. Tôi muốn biết cách hiển thị dấu tick trong trục x chỉ cho các tháng được dán nhãn (ví dụ: Mar 07, Mar 08, v.v.) trong khi vẫn giữ các đường màu xám thẳng đứng cho mỗi tháng.Làm thế nào để nói với ggplot2 của R để đặt dấu tick cho một số giá trị của trục x và vẫn giữ đường thẳng đứng cho các giá trị khác

Lý do chính là vì có dấu tích cho mỗi tháng khiến bạn khó biết cái nào tương ứng với nhãn.

Dưới đây là một ví dụ về một âm mưu:

See how ticks on the x-axis make it hard to know where is each month

Đây là dòng R đằng sau:

ggplot(timeseries_plot_data_mean,aes(as.numeric(project_date)))+ 
    geom_line(aes(y=num_views))+geom_point(aes(y=num_views))+ 
    stat_smooth(aes(y=num_views),method="lm")+ 
    scale_x_continuous(breaks = xscale$breaks, labels = xscale$labels)+ 
    opts(title="Monthly average num views")+xlab("months")+ylab("num views") 

Đây là những gì tôi muốn tạo ra. Xem cách bọ ve được đặt ngay phía trên nhãn tháng và các đường thẳng đứng vẫn ở đó hiển thị mỗi tháng.

This is what would like to generate (Inkscape, image editor,strangely replaced the dots for q's

tôi tự thay đổi nội dung cốt truyện trên sử dụng Inkscape, (bỏ qua của q, Inkscape lạ thay thế các dấu chấm cho q của)

Trả lời

8

Đây là một giải pháp sử dụng các tham số của minor_breaksscale_x_date(). Để sử dụng, giá trị x của bạn phải thuộc loại Date thay vì numeric.

library(ggplot2) 
set.seed(123) 

x <- seq(as.Date("2007/3/1"), as.Date("2012/4/1"), by = "1 month") 
y <- ((exp(-10 * seq(from=0, to=1, length.out=length(x))) * 120) + 
     runif(length(x), min=-10, max=10)) 

dat <- data.frame(Months=x, Views=y) 

x_breaks <- seq(as.Date("2007/3/1"), as.Date("2012/4/1"), by="1 year") 
x_labels <- as.character(x_breaks, format="%h-%y") 

plot_1 <- ggplot(dat, aes(x=Months, y=Views)) + 
      theme_bw() + 
      geom_line() + 
      geom_point() + 
      scale_x_date(breaks=x_breaks, labels=x_labels, minor_breaks=dat$Months) 

png("plot_1.png", width=600, height=240) 
print(plot_1) 
dev.off() 

plot_1.png

Các vấn đề liên quan