막대 그래프에 대해 R에서 x 축 레이블 회전


97

나는 행운이없는 막대 그래프에서 x 축 레이블을 45도 회전하려고합니다. 이것은 아래에있는 코드입니다.

barplot(((data1[,1] - average)/average) * 100,
        srt       = 45,
        adj       = 1,
        xpd       = TRUE,
        names.arg = data1[,2],
        col       = c("#3CA0D0"),
        main      = "Best Lift Time to Vertical Drop Ratios of North American Resorts",
        ylab      = "Normalized Difference",
        yaxt      = 'n',
        cex.names = 0.65,
        cex.lab   = 0.65)

답변:


60

DAVID의 ​​응답에 따라 수정 된 답변 :

여기에 일종의 hackish 방법이 있습니다. 더 쉬운 방법이 있다고 생각합니다. 그러나 막대 위치를 저장 barplot하고 위아래로 약간 조정 하여 막대 레이블과 레이블의 플롯 텍스트를 억제 할 수 있습니다. 다음은 mtcars 데이터 세트의 예입니다.

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)

3
주의 사항 : beside = TRUE을 사용 colMeans(x)하는 x경우 그룹당 하나의 레이블 만 원하는 경우 대신 을 사용하는 것이 좋습니다 .
MichaelChirico

274

선택적 매개 변수 las = 2를 사용하십시오.

barplot(mytable,main="Car makes",ylab="Freqency",xlab="make",las=2)

여기에 이미지 설명 입력


3
나는 이것이 받아 들여진 대답이어야한다고 믿습니다. 질문에 사용 된 기본 barplot 함수의 매개 변수를 사용하여 완벽하게 작동합니다.
jwhaley58 2016

1
동의합니다. 이것이 허용되는 답변이어야합니다. 훨씬 더 간결한 솔루션
snlan

17
par (mar = c (15,4,4,2))를 사용하여 여백을 조정하여 그림에서 세로 레이블이 잘리지 않도록합니다.
Steven Magana-Zook

24
저는 개인적으로이 접근 방식을 선호하지만 OP의 원래 질문에는 대답하지 않았습니다 . x 축 레이블을 막대 그림에서 45도 회전 시키려고합니다
arpieb

1
'make'가 라벨로 덮여 있음을 알 수 있습니다. 그것을 고치는 방법?
Filip Bartuzi

30

기본 그래픽을 사용하여 90 도보 다 작거나 같은 각도로 x 축 레이블을 회전합니다. R FAQ 에서 수정 된 코드 :

par(mar = c(7, 4, 2, 2) + 0.2) #add room for the rotated labels

#use mtcars dataset to produce a barplot with qsec colum information
mtcars = mtcars[with(mtcars, order(-qsec)), ] #order mtcars data set by column "qsec"

end_point = 0.5 + nrow(mtcars) + nrow(mtcars) - 1 #this is the line which does the trick (together with barplot "space = 1" parameter)

barplot(mtcars$qsec, col = "grey50", 
        main = "",
        ylab = "mtcars - qsec", ylim = c(0,5 + max(mtcars$qsec)),
        xlab = "",
        space = 1)
#rotate 60 degrees (srt = 60)
text(seq(1.5, end_point, by = 2), par("usr")[3]-0.25, 
     srt = 60, adj = 1, xpd = TRUE,
     labels = paste(rownames(mtcars)), cex = 0.65)

여기에 이미지 설명 입력



7

데이터 프레임을 다음 함수에 간단히 전달할 수 있습니다 .

rotate_x <- function(data, column_to_plot, labels_vec, rot_angle) {
    plt <- barplot(data[[column_to_plot]], col='steelblue', xaxt="n")
    text(plt, par("usr")[3], labels = labels_vec, srt = rot_angle, adj = c(1.1,1.1), xpd = TRUE, cex=0.6) 
}

용법:

rotate_x(mtcars, 'mpg', row.names(mtcars), 45)

여기에 이미지 설명 입력

필요에 따라 레이블 의 회전 각도 를 변경할 수 있습니다 .


6

ggplot2를 사용하여 추가 레이어를 추가하는 x 축 레이블을 회전 할 수 있습니다.

theme(axis.text.x = element_text(angle = 90, hjust = 1))

2

Andre Silva의 대답은 "barplot"줄에 한 가지주의 사항과 함께 저에게 매우 효과적입니다.

barplot(mtcars$qsec, col="grey50", 
    main="",
    ylab="mtcars - qsec", ylim=c(0,5+max(mtcars$qsec)),
    xlab = "",
    xaxt = "n", 
    space=1)

"xaxt"인수에 주목하십시오. 그것이 없으면 레이블이 60도 회전하지 않고 처음으로 두 번 그려집니다.


1

Bar Plots 문서 ...에서 함수 호출에 전달할 수있는 추가 매개 변수 ( ) 에 대해 읽을 수 있습니다.

...    arguments to be passed to/from other methods. For the default method these can 
       include further arguments (such as axes, asp and main) and graphical 
       parameters (see par) which are passed to plot.window(), title() and axis.

그래픽 매개 변수 문서 (문서 par)에서 다음을 볼 수 있습니다.

las
    numeric in {0,1,2,3}; the style of axis labels.

    0:
      always parallel to the axis [default],

    1:
      always horizontal,

    2:
      always perpendicular to the axis,

    3:
      always vertical.

    Also supported by mtext. Note that string/character rotation via argument srt to par does not affect the axis labels.

그래서 통과 las=2가 정답입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.