그래프 제목(ggtitle())
김후추씨의 조언대로 그래프를 만든 신입 데이터분석가. 그런데 문제가 하나 있다.
"그래프에 제목을 넣고 싶은데... 어떻게 해야 할까요? "
> ggplot(data=data_siseol,aes(x=채소구분소분류,y=생산량.톤.,fill=채소구분소분류))+geom_bar(stat="identity")+ggtitle("제주도 시설재배 야채 생산량")
이렇게요.
> ggplot(data=data_siseol,aes(x=채소구분소분류,y=생산량.톤.,fill=채소구분소분류))+geom_bar(stat="identity")+ggtitle("제주도 시설재배 야채 생산량")+theme(plot.title=element_text(lineheight=1.5,face="bold"))
물론 제목 글자 크기를 키워줄 수도 있는데... 아니 글꼴 지원 안해주냐고... 이럴거면 그냥 matplotlib 쓰자
축
> ggplot(data=data_siseol,aes(x=채소구분소분류,y=생산량.톤.,fill=채소구분소분류))+geom_bar(stat="identity")+ggtitle("제주도 시설재배 야채 생산량")+theme(plot.title=element_text(lineheight=1.5,face="bold"))+coord_flip()
아까도 말했지만 cooord_flip()을 쓰면 그래프가 눕는다. 아 라벨 깔끔하다 그졍
> plot+scale_x_discrete(limits=c("딸기","방울토마토"))
경고메시지(들):
Removed 42 rows containing missing values (position_stack).
과채류만 빼고싶다고요? 예 빼세요
> plot+scale_x_discrete(limits=c("깻잎","상추"),labels=c("Lettuce","penilla leaf"))
경고메시지(들):
Removed 42 rows containing missing values (position_stack).
라벨도 바꿀 수 있다.
> plot+scale_x_discrete(breaks=NULL)
축 모눈이 거슬리신다고요? 아 빼드렸습니다^^
bp + theme(axis.ticks = element_blank(), axis.text.x = element_blank())
이거는 선은 냅두고 축 라벨만 빼버린다.
> plot+expand_limits(y=0)
세로축 한도를 바꾸고 싶으면 이걸로 하면 되고
> plot+expand_limits(y=c(0,1500,3000,4500,6000,7500,9000,10500,12000))
이걸로 수동으로 간격 멕이거나
> plot+ylim(0,12000)
이걸로 시작과 끝을 정해주되 등간격으로 먹일 수도 있다.
> plot+coord_cartesian(ylim=c(1500,12000))
이렇게 표시 범위를 바꿀 수도 있다.
> plot+scale_y_reverse()
아, 물론 뒤집는것도 된다.
> sp=ggplot(dat,aes(xval,yval))+geom_point()# Setting the tick marks on an axis
# This will show tick marks on every 0.25 from 1 to 10
# The scale will show only the ones that are within range (3.50-6.25 in this case)
bp + scale_y_continuous(breaks=seq(1,10,1/4))
# The breaks can be spaced unevenly
bp + scale_y_continuous(breaks=c(4, 4.25, 4.5, 5, 6,8))
# Suppress ticks and gridlines
bp + scale_y_continuous(breaks=NULL)
# Hide tick marks and labels (on Y axis), but keep the gridlines
bp + theme(axis.ticks = element_blank(), axis.text.y = element_blank())
x축과 마찬가지로 y축도 눈금이나 라벨을 숨기는 게 된다.
축 스케일이 지수 or 로그일 때
우리의 제육쌈밥군... R로 깔끔하게 스탠다드 커브를 만들어서 냈던 게 교수님의 마음에 들었는지, 방학동안 랩에서 일해보지 않겠느냐는 제의를 받았다. 근데 왜 제육쌈밥이죠 그냥 마침 관심이 있던 분야였던 제육쌈밥군은 흔쾌히 수락했고, 첫 출근을 하게 됐는데... 실험실 선배가 그를 불러 넌지시 물어봤다.
"교수님께 얘기는 들었어. R로 standard curve를 그렸다고... 혹시... 나 좀 도와줄 수 있어? "
제육쌈밥군이 OK하자 선배는 그래프 하나를 보여줬다.
sorted(CLNSIG_dict.items())[n]
일본열도 아님 "교수님께서 좀 더 깔끔한 그래프를 보고 싶다고 하셨는데, 어떻게 해야 할 지 모르겠어. "
"어떻게 깔끔하게 바꾸고 싶으시대요? "
"데이터가 직선으로 보였으면 좋겠대. "
> library(scales)
> sp+scale_y_continuous(trans=log2_trans())
이렇게요?
sp + coord_trans(y="log2")
얘는 눈금이 이렇게 바뀐다.
"하는 김에 눈금도 바꾸면 좀 깔끔할 것 같은데... "
> sp + scale_y_continuous(trans = log2_trans(),
+ breaks = trans_breaks("log2", function(x) 2^x),
+ labels = trans_format("log2", math_format(2^.x)))
"제육쌈밥군! 덕분에 해결됐어! 이거 바로 논문에 넣어도 되겠대! "
축 비율과 축 라벨
> plot+coord_fixed(ratio=1/3)
(마른세수) 이거 꼭 비율 이렇게 해야됨?
> plot+theme(axis.title.x=element_blank())
축 제목은 이렇게 빼버리면 된다. (라벨 말고 제목)
> plot+theme(axis.title.x=element_text(face="bold",size=18),axis.text.x=element_text(size=8))
크기도 이렇게 바꿀 수 있다. 폰트만 바꾸면 되는데
> plot+scale_y_continuous(label=percent)
축 라벨이 퍼센트가 됐어요!
> plot+theme(panel.grid.minor=element_blank(),panel.grid.major=element_blank())
얘는 아예 그래프의 모눈을 싹 치워버린다.
> plot+theme(panel.grid.minor.y=element_blank(),panel.grid.major.y=element_blank())
위에도 썼지만 하나만 날리는것도 됨.
범례
> plot+guides(fill=FALSE)
경고메시지(들):
`guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
상여자는 범례를 넣지 않는다!!!
bp + scale_fill_discrete(breaks=c("trt1","ctrl","trt2"))
상여자는 범례 순서를 수동으로 매긴다!!!
> plot+guides(fill=guide_legend(reverse=TRUE))
이거는 수동으로 매기는 게 아니라 범례 순서가 반대가 된다.
> plot+guides(fill=guide_legend(title=NULL))
범례 제목은 이걸로 뺀다.
bp + scale_fill_discrete(name="Experimental\nCondition",
breaks=c("ctrl", "trt1", "trt2"),
labels=c("Control", "Treatment 1", "Treatment 2"))
범례 라벨만 바꾸거나(...)
# Specify both colour and shape
lp1 + scale_colour_discrete(name ="Payer",
breaks=c("Female", "Male"),
labels=c("Woman", "Man")) +
scale_shape_discrete(name ="Payer",
breaks=c("Female", "Male"),
labels=c("Woman", "Man"))
데이터 바이 데이터지만 데이터 그룹별로 묶거나...
> plot+theme(legend.text=element_text(colour="#939597",size=16))
범례 제목이나 내용물을 바꿀 수도 있다.
> plot+theme(legend.background=element_rect(fill="gray90"),legend.position="top")
범레를 위로 치워드렸습니다^^
선이... 선이 보인다!
넣었응게 보이지.
> plot+geom_hline(aes(yintercept=100))
y절편을 설정해서 띄울 수 있다.
> sp+geom_hline(aes(yintercept=0))+geom_vline(aes(xintercept=0))
근데 이건 너무 갔는데?
library(dplyr)
> lines <- dat %>%
+ group_by(cond) %>%
+ summarise(
+ x = mean(xval),
+ ymin = min(yval),
+ ymax = max(yval)
+ )
sp + geom_hline(aes(yintercept=10)) +
geom_linerange(aes(x=x, y=NULL, ymin=ymin, ymax=ymax), data=lines)
이런 것도 된다. ...저거 평균임?
dat_vlines <- data.frame(cond=levels(dat$cond), xval=c(10,11.5))
dat_vlines
#> cond xval
#> 1 control 10.0
#> 2 treatment 11.5
spf + geom_hline(aes(yintercept=10)) +
geom_vline(aes(xintercept=xval), data=dat_vlines,
colour="#990000", linetype="dashed")
spf + geom_hline(aes(yintercept=10)) +
geom_linerange(aes(x=x, y=NULL, ymin=ymin, ymax=ymax), data=lines)
#> Warning: Ignoring unknown aesthetics: y
아 나눠드리겠습니다.
그것은 분할출력
이거랑 때깔까지만 보면 된다.
> sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1)
> sp
내장 데이터를 활용한 그래프. 근데 이걸 좀 분할해서 띄우고 싶다... 뭐 그럴 거 아님?
sp + facet_grid(sex ~ .)
가로분열(성별)
> sp + facet_grid(. ~ time)
세로분열(시간대)
> sp + facet_grid(sex ~ time)
아, 이런 것도 된다. (성별+시간대)
> sp + facet_grid(sex ~ time)+theme(strip.text.x=element_text(size=6),strip.text.y=element_text(size=6),strip.background=element_rect(fill="#f5df4d"))
이렇게 정보가 표시되는 부분의 디자인도 바꿀 수 있다.
> labels=c(Female="Woman",Male="Man")
> sp+facet_grid(.~sex,labeller=labeller(sex=labels))
라벨이 Female이랑 Male인게 좀 거시기하면 바꾸면 된다.
색깔
먹고 죽은 귀신이 때깔도 고운데 그래프는 뭐 하면 때깔이 좋아지나...
> ggplot(data=data4_medium,aes(x=Product.name,y=Order))+geom_bar(stat="identity")
참고로 원래 그래프는 이렇게 단색이다.
> ggplot(data=data4_medium,aes(x=Product.name,y=Order))+geom_bar(stat="identity",fill="#f7cac9")
그래서 이렇게 단색으로만 변경이 된다.
> ggplot(data=data4_medium,aes(x=Product.name,y=Order,fill=Product.name))+geom_bar(stat="identity")
물론 데이터별로 먹이면 이런 화려한 그래프가 나를 감싼다. 근데 저거 파레트 못 바꾸냐고?
> cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
> ggplot(data=data4_medium,aes(x=Product.name,y=Order,fill=Product.name))+geom_bar(stat="identity")+scale_fill_manual(values=cbPalette)
되는데요?
scale_colour_manual(values=cbPalette)
선이나 점이면 이거 쓰자.
> ggplot(data=data4_medium,aes(x=Product.name,y=Order,fill=Product.name))+geom_bar(stat="identity")+scale_fill_hue(l=40)
Hue를 바꾸면 밝기가 달라지고(default=65)
> ggplot(data=data4_medium,aes(x=Product.name,y=Order,fill=Product.name))+geom_bar(stat="identity")+scale_fill_hue(c=45)
c를 바꾸면 채도가... 이건 근데 default가 얼마임?
> ggplot(data=data4_medium,aes(x=Product.name,y=Order,fill=Product.name))+geom_bar(stat="identity")+scale_fill_brewer()
아, 파레트 자체를 바꾸는 것도 된다.
'Coding > R' 카테고리의 다른 글
R 배워보기-번외편: R로 standard curve 그리기 (0) | 2022.08.22 |
---|---|
R의 내장 데이터 (부제: 공공데이터 어떻게 받아요?) (0) | 2022.08.22 |
R 배워보기-8.1. ggplot2로 그래프 그리기 (상) (0) | 2022.08.22 |
R 배워보기-7. Statistical analysis (하) (0) | 2022.08.21 |
R 배워보기-7. Statistical analysis (상) (0) | 2022.08.21 |