2012-07-31 55 views
25

Tôi đang có một thời gian rất, rất khó khăn để trục x nhìn chính xác cho đồ thị của tôi.Định dạng ngày trên trục X trong ggplot2

Dưới đây là dữ liệu của tôi (được tạo ra thông qua dput()):

df <- structure(list(Month = structure(1:12, .Label = c("2011-07-31", "2011-08-31", "2011-09-30", "2011-10-31", "2011-11-30", "2011-12-31", "2012-01-31", "2012-02-29", "2012-03-31", "2012-04-30", "2012-05-31", "2012-06-30"), class = "factor"), AvgVisits = c(6.98655104580674,7.66045407330464, 7.69761337479304, 7.54387561322994, 7.24483848458728, 6.32001400498928, 6.66794871794872, 7.207780853854, 7.60281201431308, 6.70113837397123, 6.57634103019538, 6.75321935568936)), .Names = c("Month","AvgVisits"), row.names = c(NA, -12L), class = "data.frame") 

Dưới đây là bảng xếp hạng Tôi cố gắng để vẽ đồ thị:

ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar() + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") 

Đó biểu đồ hoạt động tốt - nhưng, nếu tôi muốn điều chỉnh định dạng của ngày, tôi tin rằng tôi nên thêm điều này: scale_x_date(labels = date_format("%m-%Y"))

Tôi đang cố gắng để làm cho nó để các nhãn ngày là 'MMM-YYYY'

ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar() + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") + 
    scale_x_date(labels = date_format("%m-%Y")) 

Khi tôi âm mưu đó, tôi tiếp tục nhận được lỗi này:

stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

Mặc dù giờ nghiên cứu về định dạng của geom_linegeom_bar, tôi không thể sửa chữa nó. Bất cứ ai có thể giải thích những gì tôi đang làm sai?

Chỉnh sửa: Theo suy nghĩ tiếp theo: Bạn có thể sử dụng ngày làm yếu tố hay bạn nên sử dụng as.Date trên cột ngày?

+0

Bạn đã nạp 'thư viện (quy mô) '? – smillig

+0

@smillig yes - 'scales' được tải. – mikebmassey

Trả lời

32

Can you use date as a factor?

Có, nhưng có thể bạn không nên.

...or should you use as.Date on a date column?

Có.

nào đưa chúng ta đến đây:

library(scales) 
df$Month <- as.Date(df$Month) 
ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar(stat = "identity") + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") + 
    scale_x_date(labels = date_format("%m-%Y")) 

enter image description here

trong đó tôi đã thêm stat = "identity"-geom_bar cuộc gọi của bạn.

Ngoài ra, thông báo về băng thông không phải là lỗi. Một lỗi sẽ thực sự nói "Lỗi" trong đó, và tương tự như một cảnh báo sẽ luôn luôn nói "Cảnh báo" trong đó. Nếu không thì đó chỉ là một thông điệp.

+0

Phát ngay. Cảm ơn. Tôi chưa từng thấy 'stat =' identity '' trước đây. Sẽ nghiên cứu thêm bây giờ. Cảm ơn. – mikebmassey

+0

@mikebmassey Điều cơ bản cần nhớ với 'stat =" identity "' là nếu bạn đang làm các ô bar và bạn đã tổng hợp dữ liệu để bạn có chiều cao của mỗi thanh rồi, hãy sử dụng nó. – joran

+0

Theo dõi liên quan đến biểu đồ đường cho điều này: vì vậy điều này chỉ áp dụng cho các ô bar - tôi vừa cố gắng cắm cùng một thứ với 'geom_line' - có và không có' stat = "identity" '- tôi nhận được cảnh báo này 'geom_path: Mỗi nhóm chỉ bao gồm một quan sát. Nếu tôi chỉ có 1 nhóm dữ liệu, tại sao tôi cần phải nhóm để làm cho nó hoạt động?Cảm ơn – mikebmassey

19

Để hiển thị tháng như tháng 1 năm 2017 Tháng 2 năm 2017 vv:

scale_x_date(date_breaks = "1 month", date_labels = "%b %Y") 

Góc ngày nếu chúng chiếm quá nhiều không gian:

theme(axis.text.x=element_text(angle=60, hjust=1)) 
+1

gần như phát điên, cố gắng tìm ra lý do tại sao điều này không hiệu quả. Đã tìm ra, 'theme_bw()' ghi đè bất cứ thứ gì 'theme()' nào. Sắp xếp lại, và nó hoạt động tốt. Để nó ở đây trong trường hợp, ai đó đang gặp vấn đề tương tự. – Ufos

+1

Đánh giá cao câu trả lời của bạn, điều này giúp tôi, viết ra những lời của tôi để thể hiện sự đánh giá cao của tôi – cloudscomputes

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