2012-01-09 44 views
6

Sau khi nghiên cứu cuốn sách của Hadley và tìm kiếm ở đây trên SO tôi đã tạo ra một bản đồ nhiệt bao gồm một ma trận năm và tháng, với màu sắc thay đổi theo phần trăm thay đổi trong một biến chuỗi thời gian. Bản đồ nhiệt và mã tôi sử dụng để lấy nó được hiển thị bên dưới. Tôi có một vài câu hỏi còn lại mà tôi không thể tự giải quyết được.R ggplot heatmap sử dụng geom_tile(): cách sắp xếp theo năm và hiển thị tất cả các năm theo trục y?

1) Làm cách nào để sắp xếp/sắp xếp ma trận sao cho các năm trong trục y chạy từ sớm nhất đến trục mới nhất? Trong trường hợp này tôi muốn những năm bắt đầu từ đầu năm 1995 và tiếp tục đến năm 2011 ở dưới cùng của trục y.

2) Tôi muốn mỗi năm được hiển thị trên trục y nhưng thay vào đó chỉ hiển thị mỗi năm thứ 5. Tôi nghĩ rằng scale_y_date trong mã của tôi sẽ đối phó với điều này nhưng nó dường như không có ảnh hưởng. Làm thế nào tôi có thể buộc trục y hiển thị mỗi năm?

3) Tôi nghi ngờ điều này vẫn nằm trong danh sách "cần làm" của ggplot2, nhưng có cách nào để tạo nhãn trục x (trong trường hợp này là tháng 1, tháng 2, tháng 3, tháng 4 vv) hiển thị ở đầu của cốt truyện chứ không phải ở phía dưới?

require(ggplot2) 
mydf <- data.frame(date=seq(as.Date("1995/1/1"), by="month", length.out=203),yoy=runif(203, min=-1, max=1)) 
p_heat <- ggplot(mydf, aes(x=month(date,label=TRUE),y=year(date), fill = yoy, label = sprintf("%1.1f%%", 100*yoy),size=10)) + 
    scale_y_date(major="years", format="%Y") + 
    geom_tile() + geom_text(aes(size=10)) + 
    scale_fill_gradient2(low = "red", high = "green") + 
    scale_x_discrete(expand=c(0,0)) + 
    scale_y_continuous(expand=c(0,0)) + 
    opts(title="Value (%)") + 
    opts(panel.grid.minor=theme_blank()) + 
    opts(axis.ticks = theme_blank()) + 
    opts(panel.grid.major=theme_blank()) + 
    opts(axis.title.y = theme_blank()) + 
    opts(axis.title.x = theme_blank()) + 
    opts(legend.position = "none") 
p_heat 

enter image description here

+4

Vui lòng tránh các tông màu đỏ lục, vì ~ 10% nam giới sẽ gặp khó khăn lớn khi phân biệt tích cực với giá trị âm. – hadley

Trả lời

5

Đối với hai điểm đầu tiên, bạn có thể thay thế scale_y_continuous với scale_y_reverse có những năm đầu tiên lên hàng đầu, và chỉ định rõ ràng vỡ và nhãn.

p_heat + scale_y_reverse(breaks=1995:2011, labels=1995:2011, expand=c(0,0)) 
+0

Cảm ơn Vincent, điều đó phù hợp với tôi. Hữu ích khi có ai đó trong cùng múi giờ! – SlowLearner

+0

Ngẫu nhiên, không ai có một cái nhìn về nơi tôi nên đặt đối số "kích thước" trong đoạn mã này để kiểm soát tốt nhất kích thước của phông chữ trong bản thân heatmap? Nếu nó nằm trong câu lệnh ggplot, geom_tile, phần geom_text hay ...? – SlowLearner

+0

Kích thước phải nằm ngoài "aes", nếu không nó được hiểu là hệ số 1 giá trị và không có hiệu lực: geom_text (size = 10) sẽ hoạt động. –

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