2013-05-03 28 views
27

Giả sử tôi có một dataframe:Sử dụng `geom_line()` với trục X là các yếu tố

hist <- data.frame(date=Sys.Date() + 0:13, 
        counts=1:14) 

Tôi muốn âm mưu đếm tổng số chống lại các ngày trong tuần, sử dụng một dòng để kết nối các điểm. Sau đây đặt điểm trên mỗi giá trị:

hist <- transform(hist, weekday=factor(weekdays(date), 
             levels=c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'))) 
ggplot(hist, aes(x=weekday, y=counts)) + geom_point(stat='summary', fun.y=sum) 

Khi tôi cố gắng kết nối chúng với một dòng (geom_line()), ggplot phàn nàn về chỉ có một quan sát dữ liệu cho mỗi nhóm và do đó không thể vẽ một đường giữa các điểm.

Tôi hiểu điều này - nó đang cố vẽ một dòng cho mỗi ngày trong tuần (mức yếu tố).

Làm cách nào để nhận được ggplot chỉ giả vờ (chỉ với mục đích của dòng) mà các ngày trong tuần là số? Có lẽ tôi phải có một cột khác day_of_week là 0 cho thứ hai, 1 cho ngày thứ ba, v.v ...?

Trả lời

33

Nếu tôi hiểu vấn đề một cách chính xác, xác định group=1 và thêm một lớp stat_summary() nên làm các trick:

ggplot(hist, aes(x=weekday, y=counts, group=1)) + 
geom_point(stat='summary', fun.y=sum) + 
stat_summary(fun.y=sum, geom="line") 

enter image description here

+3

tuyệt vời! Mục đích của 'nhóm = 1' là gì (tại sao 1? Điều đó làm gì?) –

+3

Ồ, tôi nghĩ tôi đã tìm thấy nó. [ở đây (tài liệu ggplot2)] (http://docs.ggplot2.org/current/aes_group_order.html) –

+5

Trong trường hợp bạn muốn vẽ nhiều dòng cùng một lúc, bạn nên chỉ định 'group = variableWhichDefinesLines ' –

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