2017-12-23 35 views
2

사용자 정의 y 제한과 함께 ggplot2 막대 그래프를 그려야합니다.ggplot2 : 사용자 정의 y 제한이있는 geom_bar

Type <- LETTERS[1:5] 
Y <- c(99, 99.5, 99.0, 98.8, 98.5) 

df <- data.frame(Type, Y) 

다음 코드는 막대 차트 잘 작동 :

library(ggplot2) 
ggplot(data = df, mapping = aes(x = Type, y = Y, fill = Type)) + 
    geom_bar(stat = "identity") + 
    theme_bw() 

을하지만, 나는 Y 제한을 설정할 수 없습니다입니다. 아래 코드를 참조하십시오.

ggplot(data = df, mapping = aes(x = Type, y = Y, fill = Type)) + 
    geom_bar(stat = "identity") + 
    scale_y_continuous(limits = c(90, 100)) + 
    theme_bw() 

ggplot(data = df, mapping = aes(x = Type, y = Y, fill = Type)) + 
    geom_bar(stat = "identity") + 
    ylim(90, 100) + 
    theme_bw() 

편집은

나는이 문제가 stat = "identity" 때문이다 같아요.

+0

나는'geom_bar'가'에서 간다이 가능한 경우 모르는 0 ' 'y' (y 축에 break를 삽입하는 것). 왜'geom_point'를 그리지 않으십니까? – PoGibas

+0

귀하의 의견에 @PoGibas 감사합니다. 네,'geom_point'는 또 다른 가능성이 있습니다. 그러나 나는이 점들이 막대를 던지고 있음을 보여주고 싶다. 어떤 생각. 유용한 답변을 주신 고맙습니다 @PoGibas. – MYaseen208

답변

3

geom_rect() 대신 geom_bar()의 사용 해결책 :

# Generate data 
Type <- LETTERS[1:5] 
Y <- c(99, 99.5, 99.0, 98.8, 98.5) 
df <- data.frame(Type, Y) 

# Plot data 
library(ggplot2) 
ggplot() + 
    geom_rect(data = df, 
       aes(xmin = as.numeric(Type) - 0.3, 
        xmax = as.numeric(Type) + 0.3, 
        ymin = 90, ymax = Y, 
        fill = Type)) + 
    scale_x_continuous(label = df$Type, breaks = 1:nrow(df)) 

geom_rect()에서 X가 지정은 as.numeric(X) -/+ value로 좌표; ymin은 원하는 하한값으로 조정되고 ymax은 실제 Y 값으로 조정됩니다. coord_cartesian를 사용

enter image description here

+0

y가 90부터 시작해야합니다. 감사합니다. – MYaseen208

+0

@ MYaseen208 직사각형과 틱 사이의 간격을 의미합니까? – PoGibas

+1

예 사각형과 x 틱 사이에 여분의 공백이 있습니다. – MYaseen208

3

대체 :

ggplot(data = df, mapping = aes(x = Type, y = Y, fill = Type)) + 
    geom_bar(stat = "identity") + 
    coord_cartesian(ylim = c(90, 100)) + 
    theme_bw() 

당신에게 제공합니다 :

enter image description here

+1

이 솔루션은 더 매력적입니다. 좋은 답변을 주셔서 감사합니다 @ 루크 C. – MYaseen208

+0

이것은'coord_cartesian (ylim = range (df $ Y))'를 사용하여 찾고자했던 것입니다. – MYaseen208

+1

@ MYaseen208 - 좋은 전화입니다. 꽤 매끄럽습니다. –