x 축에 categorical 형 변수와 y 축에 숫자 변수가있는 그래프를 플로팅하고 있습니다.
x 축의 경우 데이터 포인트가 많을 경우 기본 텍스트 형식으로 인해 각 눈금 표시의 레이블이 다른 레이블과 겹치게됩니다. (a) 축 텍스트의 글꼴 크기를 변경하고 (b) 텍스트가 축에 수직이되도록 텍스트 방향을 변경하려면 어떻게합니까?
x 축에 categorical 형 변수와 y 축에 숫자 변수가있는 그래프를 플로팅하고 있습니다.
x 축의 경우 데이터 포인트가 많을 경우 기본 텍스트 형식으로 인해 각 눈금 표시의 레이블이 다른 레이블과 겹치게됩니다. (a) 축 텍스트의 글꼴 크기를 변경하고 (b) 텍스트가 축에 수직이되도록 텍스트 방향을 변경하려면 어떻게합니까?
답변:
사용 theme()
:
d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
theme(text = element_text(size=20),
axis.text.x = element_text(angle=90, hjust=1))
#vjust adjust the vertical justification of the labels, which is often useful
여기에서 ggplot의 형식을 지정하는 방법에 대한 좋은 정보가 많이 있습니다 . 을 사용하여 수정할 수있는 전체 매개 변수 목록 (기본적으로 모든 매개 변수)을 볼 수 있습니다 ?theme
.
hjust=1
.
Ditto @Drew Steen의 사용 theme()
. 축 텍스트 및 제목에 대한 공통 테마 속성은 다음과 같습니다.
ggplot(mtcars, aes(x = factor(cyl), y = mpg))+
geom_point()+
theme(axis.text.x = element_text(color = "grey20", size = 20, angle = 90, hjust = .5, vjust = .5, face = "plain"),
axis.text.y = element_text(color = "grey20", size = 12, angle = 0, hjust = 1, vjust = 0, face = "plain"),
axis.title.x = element_text(color = "grey20", size = 12, angle = 0, hjust = .5, vjust = 0, face = "plain"),
axis.title.y = element_text(color = "grey20", size = 12, angle = 90, hjust = .5, vjust = .5, face = "plain"))
많은 플롯을 만들 때 전역으로 설정하는 것이 좋습니다 (관련 부분은 두 번째 줄, 세 줄이 함께 작동하는 예).
library('ggplot2')
theme_update(text = element_text(size=20))
ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()
"fill"속성을 사용하면 이와 같은 경우에 도움이됩니다. element_blank()
범례를 사용하여 여러 색상 막대 차트를 표시하고 표시 하여 축에서 텍스트를 제거 할 수 있습니다 . 다음과 같이 수리점에서 부품 제거 빈도를 플로팅합니다.
ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x = element_blank())
막대 차트에 막대가 많고 읽을 수 있고 서로 겹치지 않을 정도로 작은 적절한 글꼴 크기를 찾을 수 없었기 때문에이 경우에는이 솔루션을 사용했습니다.
겹치는 레이블을 처리하는 다른 방법은을 사용하는 것 guide = guide_axis(n.dodge = 2)
입니다.
library(dplyr)
library(tibble)
library(ggplot2)
dt <- mtcars %>% rownames_to_column("name") %>%
dplyr::filter(cyl == 4)
# Overlapping labels
ggplot(dt, aes(x = name, y = mpg)) + geom_point()
ggplot(dt, aes(x = name, y = mpg)) + geom_point() +
scale_x_discrete(guide = guide_axis(n.dodge = 2))