원하십니까?
p1 <- ggplot(data = df.v)+
geom_bar(aes(val.clss)) + geom_vline(xintercept = 3.5, col='red', lwd=2)
plot(p1)
더 일반적인 해결책이 될 수있다 :
df.v <- data.frame(val = rnorm(1000, mean=15, sd=4))
df.v$val.clss <- cut(df.v$val, seq(min(df.v$val), max(df.v$val), 1))
lvls <- levels(df.v$val.clss)
lvls
[1] "(2.97,3.97]" "(3.97,4.97]" "(4.97,5.97]" "(5.97,6.97]" "(6.97,7.97]" "(7.97,8.97]" "(8.97,9.97]" "(9.97,11]" "(11,12]" "(12,13]"
[11] "(13,14]" "(14,15]" "(15,16]" "(16,17]" "(17,18]" "(18,19]" "(19,20]" "(20,21]" "(21,22]" "(22,23]"
[21] "(23,24]" "(24,25]" "(25,26]" "(26,27]" "(27,28]" "(28,29]" "(29,30]"
vline.level <- '(18,19]' # you want to draw line here, right before 18
p1 <- ggplot(data = df.v)+
+ geom_bar(aes(val.clss)) + geom_vline(xintercept = which(lvls == vline.level) - 0.5, col='red', lwd=2) +
+ theme(axis.text.x = element_text(angle=90, vjust = 0.5))
plot(p1)
당신이 제일 한가운데의 수준을 선택하려면,
length(lvls)
#[1] 27
# choose the middlemost level, since length(lvls) is odd in this case, the midpoint will be ceiling(length(lvls)/2)
vline.level <- lvls[ceiling(length(lvls)/2)]
p1 <- ggplot(data = df.v)+
geom_bar(aes(val.clss)) + geom_vline(xintercept = which(lvls == vline.level) - 0.5, col='red', lwd=2) +
theme(axis.text.x = element_text(angle=90, vjust = 0.5))
plot(p1)
당신이 줄을 당신은 숫자에 (그들이에 매핑되는 요인을) 자신의 위치를 변환 할 수 있습니다 사이에 가고 싶은 두 막대의 레이블을 알고 있다면3210
의 vline에 대한 업데이트 된 코드를 참조하십시오.이 기능은 이론상으로 작동합니다. 그러나 위 예제 코드를 'cut (df.v $ val, seq (min (df.v $ val), max (df.v $ val), 0.2))' 으로 변경하면 34 개의 클래스 16.5를 xintercept로 선택하면 오른쪽으로 너무 멀리 떨어져 있습니다. 나는 왜, 어쩌면 도울 수 있겠는가? 정말 고맙습니다. 글쎄, 나는 'length (levels (df.v $ val.clss))'를 사용할 때 34라는 것을 알았지 만, 내가 막대를 세면 30 막대 만 얻는다. 이것은 내 문제의 근원 인 것 같다. – rashid
값이없는 범주로 인해 발생했을 가능성이 큽니다. 'ggplot'은 기본적으로 그 값을 떨어 뜨립니다. 이것은 플롯의 레벨에 영향을 미칩니다. 일부 선택적 솔루션에 대해서는 편집을 참조하십시오. 그러나,'물방울'은 보통 연속 데이터에 대한 좋은 생각이 아니기 때문에주의해서 사용해야합니다. –
감사합니다. 'scale_x_discrete (drop = FALSE)'가 자동 계산의 트릭입니다. 도움에 정말 감사드립니다. – rashid