ggplot2 플롯에서 수직 격자 선을 어떻게 억제 할 수 있습니까?


81

가로 (x) 배치의 표시로 막대가 충분한 막대 차트를 작성 중이므로 불필요한 세로 격자 선을 그리는 것을 피하고 싶습니다.

opts ()에서 마이너 및 메이저 그리드 라인의 스타일을 지정하는 방법을 이해하지만 수직 그리드 라인을 억제하는 방법을 평생 알 수는 없습니다.

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)
  )

이 시점에서 모든 격자 선을 억제 한 다음 geom_hline ()을 사용하여 다시 그려야 할 것 같습니다. / geom_hline ()에 공급할 주요 격자 선 위치.)

어떤 생각이라도 주시면 감사하겠습니다!

답변:


24

사용해보십시오

scale_x_continuous (중단 = NULL)

이렇게하면 모든 수직 격자 선과 x 축 눈금 표시 레이블이 제거됩니다.


9
그랬지만 지금은 언급했듯이 x 축 레이블이 없습니다. 필요한 x 축 레이블을 다시 작성하는 방법에 대한 생각이 있습니까?
Tarek

18
새 버전은 말한다,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)x 변수가 이산 형일 때 사용할 변수입니다.
luchonacho

4
레이블을 갖고 싶지만 휴식 시간이 없으면 작동하지 않습니다.
groceryheist

@groceryheist는 여전히 솔루션을 찾고 있는지 확실하지 않지만 여기 ggExtra 라이브러리에서 removeGrid를 발견했습니다 . rdrr.io removeGrid 축 레이블을 유지하면서 그리드 선을 제거합니다.
SHKT

176

ggplot2 0.9.2부터는 "테마"를 사용하는 것이 훨씬 쉬워졌습니다. 이제 아래에 설명 된대로 panel.grid.major.x 및 panel.grid.major.y에 별도로 테마를 할당 할 수 있습니다.

#   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" ) 
    )

이 예제의 결과는 매우보기 흉하지만 수평선과 x 축 눈금을 유지하면서 수직선을 제거하는 방법을 보여줍니다.


2
아마도이 업데이 트를해야합니다 : 그것은 나에게 준다Error: stat_count() must not be used with a y aesthetic.
가스파

1
2020 년 6 월 19 일 현재 오류가 여전히 존재합니다. 이 솔루션은 현재 작동하지 않습니다.
Meg

1
@Meg는 여전히 솔루션을 찾고 있는지 확실하지 않지만 여기 ggExtra 라이브러리에서 removeGrid를 발견했습니다 . rdrr.io removeGrid 축 레이블을 유지하면서 그리드 선을 제거합니다.
SHKT

4

이렇게하면 데이터 포인트 만 남게됩니다.

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())

아마도 이것은 업데이트가 필요합니다. 실행하면 다음과 같은 오류가 발생합니다. Error in opts (panel.background = theme_blank ()) : could not find function "opts"또한이 답변은 "data"를 사용하는 OP의 재현 가능한 답변을 따르지 않습니다. "out") 및 "x"및 "y", "X1"및 "X2"가 아닙니다.
Meg

1

관련 스레드에서 내 대답 복사,

2020 년에 이것을 찾는 사람들을 위해 ggExtra 라이브러리의 removeGrid 함수 형태의 솔루션을 찾았습니다. rdrr.io> removeGrid

ggplot2 버전 3.3.0 및 ggExtra 버전 0.9에서 작동하도록 테스트하여 격자 선없이 축 눈금을 제공했습니다.


1

옵션 1:

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

ggplot(data_df, aes(x, y)) +
  geom_bar(stat = 'identity') +
  theme(panel.background = element_rect(fill = "white"))

옵션 2 :

data_df <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4))
    
ggplot(data_df, aes(x, y)) +
      geom_bar(stat = 'identity') +
      theme(
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank()
      )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.