[r] ggplot2의 회전 및 간격 축 레이블
x 축이 레이블이 긴 요소 인 그림이 있습니다. 이상적인 시각화는 아니지만 지금은 레이블을 세로로 회전하고 싶습니다. 아래 코드 로이 부분을 알아 냈지만 알 수 있듯이 레이블이 완전히 표시되지 않습니다.
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))
답변
마지막 줄을
q + theme(axis.text.x = element_text(angle = 90, hjust = 1))
기본적으로 축은 회전 할 때도 텍스트 중심에 정렬됩니다. +/- 90도 회전 할 때 일반적으로 대신 가장자리에 정렬하려고합니다.
위의 이미지는 이 블로그 게시물 에서 가져온 것 입니다.
답변
눈금 레이블의 텍스트를 완전히 표시하고 y 축 레이블과 같은 방향으로 읽으려면 마지막 줄을
q + theme(axis.text.x=element_text(angle=90, hjust=1))
답변
사용하다 coord_flip()
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
qplot(cut,carat,data = diamonds, geom = "boxplot") +
coord_flip()
데이터 과학 R의 3.9 장 에서 Wickham과 Grolemund는이 정확한 질문에 대해 다음과 같이 말합니다.
coord_flip()
x 및 y 축을 전환합니다. 가로 상자 그림을 원할 때 유용합니다 (예 :). 긴 레이블에도 유용합니다. x 축에 겹치지 않고 맞추기가 어렵습니다.
답변
캔버스 회전 기능을 도입 한 이후 ggtern 최신 버전에서 제안하려고했던 것과 비슷한 강력한 솔루션 인 대체 솔루션을 제공하고 싶습니다 .
기본적으로 element_text
주어진 각도 (예 : 각도) 및 위치 (예 : x, y, 위 또는 오른쪽 중 하나) 정보 를 반환하는 함수를 작성하여 삼각법을 사용하여 상대 위치를 결정해야합니다 .
#Load Required Libraries
library(ggplot2)
library(gridExtra)
#Build Function to Return Element Text Object
rotatedAxisElementText = function(angle,position='x'){
angle = angle[1];
position = position[1]
positions = list(x=0,y=90,top=180,right=270)
if(!position %in% names(positions))
stop(sprintf("'position' must be one of [%s]",paste(names(positions),collapse=", ")),call.=FALSE)
if(!is.numeric(angle))
stop("'angle' must be numeric",call.=FALSE)
rads = (angle - positions[[ position ]])*pi/180
hjust = 0.5*(1 - sin(rads))
vjust = 0.5*(1 + cos(rads))
element_text(angle=angle,vjust=vjust,hjust=hjust)
}
솔직히 말하자면, 각도를 지정할 때 및 인수 에 ggplot2
대해 ‘자동’옵션을 사용할 수 있어야한다고 생각합니다. 어쨌든 위의 작동 방식을 보여줍니다.hjust
vjust
#Demonstrate Usage for a Variety of Rotations
df = data.frame(x=0.5,y=0.5)
plots = lapply(seq(0,90,length.out=4),function(a){
ggplot(df,aes(x,y)) +
geom_point() +
theme(axis.text.x = rotatedAxisElementText(a,'x'),
axis.text.y = rotatedAxisElementText(a,'y')) +
labs(title = sprintf("Rotated %s",a))
})
grid.arrange(grobs=plots)
다음을 생성합니다.
답변
ggpubr의 패키지 이벤트 기본 (오른쪽 정렬 텍스트, 체크하는 가운데 정렬 텍스트 상자)에 의해 옳은 일을하는 바로 가기 :
library(ggplot2)
diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))
q <- qplot(cut, carat, data = diamonds, geom = "boxplot")
q + ggpubr::rotate_x_text()
reprex 패키지 (v0.2.1) 에서 2018-11-06에 작성
관련 인수 이름에 대한 GitHub 검색에서 찾은 https://github.com/search?l=R&q=element_text+angle+90+vjust+org%3Acran&type=Code
답변
또한, ggplot 3.3.0
제공 guide_axis(n.dodge = 2)
(같은 guide
인수 scale_..
또는 x
인수에 guides
수직으로 라벨을 피하고하여 오버 플로팅 문제를 극복하기 위해). 이 경우 꽤 잘 작동합니다.
library(ggplot2)
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
ggplot(diamonds, aes(cut, carat)) +
geom_boxplot() +
scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
NULL
답변
추가 종속성없이 읽을 수있는 x 눈금 레이블을 얻으려면 다음을 사용하십시오.
... +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
...
이렇게하면 눈금 레이블을 시계 반대 방향으로 90 ° 회전하고 끝 ( hjust = 1
)과 가운데를 해당 눈금 표시 ( vjust = 0.5
)에 가로로 세로로 맞 춥니 다 .
전체 예 :
library(ggplot2)
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))
참고, 수평 / 수직 정당화 매개 변수가 vjust
/ hjust
의 element_text
텍스트를 기준으로합니다. 따라서 수평 정렬을 vjust
담당합니다 .
그렇지 않으면 vjust = 0.5
다음과 같습니다.
q + theme(axis.text.x = element_text(angle = 90, hjust = 1))
그렇지 않으면 hjust = 1
다음과 같습니다.
q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5))
(유선) 이유로 눈금 레이블을 시계 방향으로 90 ° 회전하려면 (왼쪽에서 읽을 수 있도록) 다음을 사용해야 q + theme(axis.text.x = element_text(angle = -90, vjust = 0.5, hjust = -1))
합니다..
이 모든 것은 이미이 답변 의 의견에서 논의 되었지만이 질문으로 자주 돌아와서 의견을 읽지 않고 복사 할 수있는 답변을 원합니다.