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, vjust = 0.5, hjust=1))
기본적으로 축은 회전하더라도 텍스트의 중심에 정렬됩니다.+/- 90도로 회전할 때 일반적으로 다음과 같이 가장자리에 정렬은 다음과 같습니다.

위의 이미지는 이 블로그 게시물에서 온 것입니다.
ggplot 3.3.0 를 제공하여 이 문제를 해결합니다.guide_axis(angle = 90)(로서)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(angle = 90)) +
# ... or, equivalently:
# guides(x = guide_axis(angle = 90)) +
NULL

인수의 문서에서:
테마() / element_text()에서 각도를 설정하는 것과 비교하여 일부 휴리스틱을 사용하여 사용자가 원하는 hjust 및 vjust를 자동으로 선택합니다.
또는 다음과 같은 기능도 제공합니다. guide_axis(n.dodge = 2)(로서)guide에 대한 인수입니다.scale_..또는 로서x에 대한 인수입니다.guides 라벨을 수직으로 피함으로써 오버래핑 문제를 극복합니다.꽤 잘 합니다: 우경에는잘매작동니다합이우다▁it니작.
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

사용하다coord_flip()
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
qplot(cut, carat, data = diamonds, geom = "boxplot") +
coord_flip()
더하다str_wrap()
# wrap text to no more than 15 spaces
library(stringr)
diamonds$cut2 <- str_wrap(diamonds$cut, width = 15)
qplot(cut2, carat, data = diamonds, geom = "boxplot") +
coord_flip()
R for Data Science의 3.9장에서 Wickham과 Grollemund는 다음과 같은 정확한 질문에 대해 말합니다.
coord_flip()x축과 y축을 전환합니다.이것은 수평 상자 그림을 원하는 경우에 유용합니다(예:).긴 레이블에도 유용합니다. X축에 겹치지 않고 맞추기가 어렵습니다.
눈금 레이블의 텍스트를 완전히 표시하고 y축 레이블과 동일한 방향으로 읽으려면 마지막 줄을 다음으로 변경합니다.
q + theme(axis.text.x=element_text(angle=90, hjust=1))
캔버스 회전 기능을 도입한 이후로 제가 제안하려는 것과 유사한 강력한 솔루션이 ggtern 최신 버전에 필요했습니다.
. 즉, 기 으 사 삼 상 위 합 결 니 다 야 해 치 정 를 본 대 적 여 하 용 로 각 법 을 ▁an ▁which ▁function ▁a ▁basically ▁returns▁using on , ▁positions ▁the ▁building 다 니 ▁trig 기 본 ▁relative ometry 삼각법을 사용하여 다음을 반환하는 함수를 구축합니다.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
구식 - 보다 간단한 접근 방식은 이 답변을 참조하십시오.
추가 종속성 없이 읽을 수 있는 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 = 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)).
이 모든 것이 이 답변의 댓글에서 이미 논의되었지만 저는 이 질문에 너무 자주 돌아와 댓글을 읽지 않고 복사할 수 있는 답변을 원합니다.
의 대안coord_flip()사용하는 것입니다.ggstance꾸러미장점은 그래프를 다른 그래프 유형과 쉽게 결합할 수 있다는 것이며, 더 중요한 것은 좌표계에 고정 척도 비율을 설정할 수 있다는 것입니다.
library(ggplot2)
library(ggstance)
diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))
ggplot(data=diamonds, aes(carat, cut)) + geom_boxploth()

reprex 패키지(v0.3.0)에 의해 2020-03-11에 생성되었습니다.
또한 ggplot23.3+를 사용하면 cord_flip() 없이 수평 플롯을 만들 수 있습니다. 양방향 지오메트리를 지원하므로 x축과 y축을 스왑하기만 하면 됩니다.https://cmdlinetips.com/2020/03/ggplot2-2-3-0-is-here-two-new-features-you-must-know/
언급URL : https://stackoverflow.com/questions/1330989/rotating-and-spacing-axis-labels-in-ggplot2
'programing' 카테고리의 다른 글
| parallel_enabled가 없는 ODCIAgregateMerge (0) | 2023.06.08 |
|---|---|
| Vuejs, 왜 이런 거지?스토어 모듈에서 액세스할 때 $store.state.route.params.activityId가 정의되지 않았습니다. (0) | 2023.06.08 |
| Wordpress 플러그인 업그레이드 후크 기능 (0) | 2023.06.08 |
| Oracle에서 날짜 빼기 - 숫자 또는 구간 데이터 유형? (0) | 2023.06.08 |
| 테이블의 열 하나에 대해서만 변경 허용 (0) | 2023.06.08 |



