2010-04-21 22 views
11

Đây là phiên bản theo dõi từ this question, in which I was trying to suppress the vertical gridlines.Làm cách nào để ngăn chặn các đường lưới dọc trong ô ggplot2 trong khi giữ lại các nhãn trục x?

Giải pháp, như được cung cấp bởi learnr, là thêm scale_x_continuous (break = NA), nhưng điều này cũng có tác dụng phụ cũng làm giảm nhãn x trục. Tôi hoàn toàn vui khi viết nhãn lại bằng tay, nhưng không rõ với tôi làm thế nào để tìm ra nhãn nên đi đâu.

Tùy chọn khác là để chặn tất cả các đường lưới (sử dụng opts (panel.grid.major = theme_blank()) hoặc một số như vậy) và sau đó vẽ lại chỉ trong các đường lưới ngang chính. Một lần nữa, vấn đề ở đây là làm thế nào để tìm ra những điểm ngắt trong cốt truyện để cung cấp cho geom_hline().

Vì vậy, về cơ bản, lựa chọn của tôi là:.

  1. Suppress đường lưới dọc và nhãn trục x (sử dụng scale_x_continuous (ngắt = NA)) và thêm các nhãn trục x trở lại trong
  2. Suppress tất cả gridlines (sử dụng opts (panel.grid.major = theme_blank())) và thêm các đường lưới ngang chính trở lại bằng cách sử dụng geom_hline().

Dưới đây là hai lựa chọn:

library(ggplot2) 

data <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4)) 

# suppressing vertical gridlines and x-axis labels 
# need to re-draw x-axis labels 
ggplot(data, aes(x, y)) + 
    geom_bar(stat = 'identity') + 
    scale_x_continuous(breaks = NA) + 
    opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'), 
    panel.grid.minor = theme_blank(), 
    panel.background = theme_blank(), 
    axis.ticks = theme_blank() 
) 

# suppressing all gridlines 
# need to re-draw horizontal gridlines, probably with geom_hbar() 
ggplot(data, aes(x, y)) + 
    geom_bar(stat = 'identity') + 
    scale_x_continuous(breaks = NA) + 
    opts(
    panel.grid.major = theme_blank(), 
    panel.grid.minor = theme_blank(), 
    panel.background = theme_blank(), 
    axis.ticks = theme_blank() 
) 
+0

Bạn có thể sử dụng geom_text() để thêm thủ công các nhãn đánh dấu trục x. – learnr

Trả lời

5

Như mã trong comments không hiển thị độc đáo, vì vậy tôi gửi bài này như một câu trả lời. Bạn có thể làm một cái gì đó như thế này và thêm nhãn bằng tay với geom_text():

ggplot(data, aes(x, y)) + 
     geom_bar(stat = 'identity') + 
     scale_x_continuous(breaks = NA) + 
     opts(
       panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'), 
       panel.grid.minor = theme_blank(), 
       panel.background = theme_blank(), 
       axis.ticks = theme_blank() 
     )+ 
     geom_text(aes(label = x, y = -.3)) 
+0

Oh, duh - Tôi đã bối rối vì, để vẽ lại đường lưới ngang, tôi cần biết vị trí các dấu/điểm đánh dấu là gì, nhưng tôi đã biết vị trí x cho các thanh, vì vậy đây không phải là vấn đề. Cảm ơn bạn đã giúp đỡ, LearnR! – Tarek

+2

Chỉ cần một lưu ý nhanh ở đây - câu trả lời này giải quyết câu hỏi của tôi như đã nêu, nhưng chắc chắn không phải là giải pháp lý tưởng, vì chúng tôi đang vẽ x-nhãn vào khu vực cốt truyện, không vào lề.Điều này có tác dụng knock-on cho phạm vi y và phá vỡ, do đó, một giải pháp được tách ra từ khu vực dữ liệu sẽ là thích hợp hơn. Hadley, tôi không biết nếu bạn đang đọc điều này, nhưng một số cách chỉ cần tắt một trong hai đường lưới ngang hoặc dọc sẽ là tuyệt vời ... – Tarek

1

Bạn có thể làm điều này chỉnh sửa grob trực tiếp, hãy thử:

grid.remove(gPath("panel.grid.minor.x.polyline"),grep=T) 
grid.remove(gPath("panel.grid.major.x.polyline"),grep=T) 

Nó sẽ lột đường dọc của bạn. Tôi chỉ gặp vấn đề khi sử dụng nó bên trong một hàm, vì tôi đoán nó chỉ hoạt động khi ggplot được in.

Nhưng, nếu đó không phải là trường hợp của bạn và bạn sẽ chỉ cần đồ họa, nó sẽ hoạt động.

2

Những câu trả lời ở trên sẽ không làm việc trong ggplot2 phiên bản 0.9.2.1 trở lên. May mắn thay, bây giờ có một cách dễ dàng hơn để thực hiện việc này, như được mô tả để trả lời cho một câu hỏi khác: https://stackoverflow.com/a/8992102/800044.

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