Làm cách nào để loại bỏ các đường lưới dọc trong một biểu đồ ggplot2?


81

Tôi đang xây dựng một biểu đồ thanh mà các thanh này đủ để chỉ ra vị trí ngang (x), vì vậy tôi muốn tránh vẽ các đường lưới dọc thừa.

Tôi hiểu cách tạo kiểu cho các đường lưới phụ và chính trong opts (), nhưng tôi không thể tìm ra cách để chỉ các đường lưới dọc.

library(ggplot2)

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

ggplot(data, aes(x, y)) +
  geom_bar(stat = 'identity') +
  opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
    panel.grid.minor = theme_line(colour = NA),
    panel.background = theme_rect(colour = NA),
    axis.ticks = theme_segment(colour = NA)
  )

Tại thời điểm này, có vẻ như tôi sẽ phải ngăn chặn tất cả các đường lưới và sau đó vẽ chúng trở lại bằng geom_hline (), điều này có vẻ giống như một nỗi đau (cũng không hoàn toàn rõ ràng làm thế nào tôi có thể tìm thấy dấu tích / các vị trí đường lưới chính để cung cấp cho geom_hline ().)

Bất kỳ suy nghĩ sẽ được đánh giá cao!

Câu trả lời:


24

Hãy thử sử dụng

scale_x_continuous (break = NULL)

Điều này sẽ xóa tất cả các đường lưới dọc cũng như các nhãn đánh dấu trục x.


7
Điều đó đã làm được, nhưng bây giờ, như bạn đã lưu ý, tôi không có các nhãn trục x mà tôi cần - bất kỳ suy nghĩ nào về cách viết lại chúng?
Tarek

18
Phiên bản mới cho biết,Please use breaks = NULL to remove breaks in the scale. (Deprecated; last used in version 0.8.9)
Stat-R

scale_x_discrete(breaks = NULL)là một để sử dụng khi biến x là rời rạc.
luchonacho

2
Điều này không hiệu quả khi tôi muốn có nhãn nhưng không có dấu ngắt.
tạp hóa

@groceryheist không chắc bạn vẫn đang tìm giải pháp hay không, nhưng tôi đã xem qua removeGrid từ thư viện ggExtra tại đây: rdrr.io removeGrid , loại bỏ các đường lưới trong khi vẫn giữ lại các nhãn trục.
SHKT

175

Kể từ ggplot2 0.9.2, điều này đã trở nên dễ dàng hơn nhiều khi sử dụng "chủ đề". Giờ đây, bạn có thể chỉ định riêng các chủ đề cho panel.grid.major.x và panel.grid.major.y, như minh họa bên dưới.

#   simulate data for the bar graph
data <- data.frame( X = c("A","B","C"), Y = c(1:3) )    

#   make the bar graph
ggplot( data  ) +
    geom_bar( aes( X, Y ) ) +
    theme( # remove the vertical grid lines
           panel.grid.major.x = element_blank() ,
           # explicitly set the horizontal lines (or they will disappear too)
           panel.grid.major.y = element_line( size=.1, color="black" ) 
    )

Kết quả của ví dụ này trông khá xấu, nhưng nó cho thấy cách loại bỏ các đường thẳng đứng trong khi vẫn giữ nguyên các đường ngang và dấu tích trục x.


2
có lẽ đây cần một bản cập nhật: nó mang lại cho tôiError: stat_count() must not be used with a y aesthetic.
Gaspar

Lỗi vẫn tồn tại tính đến ngày 19/6/2020. Giải pháp này hiện không hoạt động.
Meg

1
@Meg không chắc bạn vẫn đang tìm giải pháp hay không, nhưng tôi đã xem qua removeGrid từ thư viện ggExtra tại đây: rdrr.io removeGrid , loại bỏ các đường lưới trong khi vẫn giữ lại các nhãn trục.
SHKT

4

Điều này chỉ để lại cho bạn các điểm dữ liệu:

ggplot(out, aes(X1, X2)) + 
    geom_point() + 
    scale_x_continuous(breaks = NULL) + 
    scale_y_continuous(breaks = NULL) + 
    opts(panel.background = theme_blank()) + 
    opts(axis.title.x = theme_blank(), axis.title.y = theme_blank())

Có lẽ điều này cần được cập nhật. Khi tôi chạy nó, tôi gặp lỗi sau: Lỗi trong opts (panel.background = theme_blank ()): không thể tìm thấy hàm "opts" Lưu ý rằng câu trả lời này cũng không tuân theo câu trả lời có thể thay đổi của OP, mà sử dụng "data" (không "out"), và "x" và "y", không phải "X1" và "X2".
Meg

0

Sao chép câu trả lời của tôi từ một chuỗi liên quan,

Đối với những người đang tìm kiếm vấn đề này vào năm 2020, tôi đã tìm thấy giải pháp dưới dạng hàm removeGrid từ thư viện ggExtra tại đây rdrr.io> removeGrid

Tôi đã kiểm tra nó hoạt động với ggplot2 phiên bản 3.3.0 và ggExtra phiên bản 0.9, cho tôi dấu tích trục mà không có đường lưới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.