데이터의 시각화 대전과학고등학교 김종헌
1. 데이터 불러오기 및 패키지 설치 가. 데이터 불러오기 나. 패키지 설치 data( mydata <- data.frame(iris) str(mydata) names(mydata)=c("꽃받침길이", "꽃받침너비", "꽃잎길이", "꽃잎너비", "종류") 나. 패키지 설치 Install.packages("ggpubr") library(ggpubr)
2. 연속형 대 연속형 가. 히스토그램 그리기 gghistogram(mydata, x="꽃받침길이", bins=30) gghistogram(mydata, x="꽃받침길이", bins=30, fill="종류") gghistogram(mydata, x="꽃받침길이", bins=30, fill="종류", add ="mean" ) gghistogram(mydata, x=c("꽃받침길이","꽃받침너비"), bins=30, combine=T, color="종류", fill="종류", xlab="꽃받침", ylab="빈도수", add="mean") ggdensity(mydata, x=c("꽃받침길이","꽃받침너비"), combine=T, color="종류", fill="종류", xlab="꽃받침", ylab="밀도", add="mean") library(dplyr) mydata$종류 <- recode(mydata$종류, "setosa"="쎄토사", "versicolor"="버시칼라", "virginica"="버지니카" )
2. 연속형 대 연속형 나. 분산형 그래프 그리기 ggscatter(mydata, x="꽃받침길이", y="꽃받침너비") ggscatter(mydata, x="꽃받침길이", y="꽃받침너비", color="종류") ggscatter(mydata, x="꽃받침길이", y="꽃받침너비", color="종류", size="꽃잎너비") ggscatter(mydata, x="꽃받침길이", y="꽃받침너비", color="종류", size="꽃잎너비", legend="right", add="reg.line", conf.int=T) ggscatter(mydata, x="꽃받침길이", y="꽃받침너비", color="종류", size="꽃잎너비", legend="right", add="reg.line", conf.int=T)+stat_regline_equation(aes(color = 종류)) +stat_cor(aes(color = 종류), label.x=6)
2. 연속형 대 연속형 다. 선형 그래프 그리기 ggline(mydata, x="꽃잎길이", y="꽃잎너비") ggline(mydata, x="꽃잎길이", y="꽃잎너비", color="종류") ggline(mydata, x="꽃잎길이", y="꽃잎너비", color="종류", x.text=90) ggline(mydata, x="종류", y="꽃잎너비", add="mean_sd")
2. 연속형 대 연속형 라. 3D 그래프 그리기 library(scatterplot3d) s3d <- scatterplot3d(with(mydata, data.frame(꽃받침길이, 꽃받침너비, 꽃잎너비)), highlight.3d=T, angle=60) s3d.fit <- lm(꽃잎너비 ~ 꽃받침길이+꽃받침너비, data=mydata); summary(s3d.fit) s3d$plane3d(s3d.fit, draw_polygon=T, draw_lines=T) s3d.orig <- s3d$xyz.convert(mydata$꽃받침길이, mydata$꽃받침너비, mydata$꽃잎너비) s3d.plane <- s3d$xyz.convert(mydata$꽃받침길이, mydata$꽃받침너비, fitted(s3d.fit)) s3d.negpos <- 1 + (resid(s3d.fit) > 0) segments(s3d.orig$x, s3d.orig$y, s3d.plane$x, s3d.plane$y, col = c("blue", "red")[s3d.negpos], lty = (2:1)[s3d.negpos])
3. 범주형 대 연속형 가. 파이챠트 그리기 summary(mydata$종류) mydata.pie <- data.frame(종류=c("쎄토사", "버시칼라", "버지니카"), 값=c(50, 50, 50)) pie.text <- paste0(mydata.pie$종류, "(", mydata.pie$값, ")"); pie.text ggpie(mydata.pie, "값", fill="종류", label=pie.text, lab.pos = "in", lab.font="white")
3. 범주형 대 연속형 나. 막대 그래프 그리기 ggbarplot(mydata, x="종류", y="꽃받침길이", fill="종류", add=c("mean")) ggbarplot(mydata, x="종류", y="꽃받침길이", fill="종류", add=c("mean_sd"), x.text=0) ggbarplot(mydata, x="종류", y="꽃받침길이", fill="종류", add=c("mean_sd"), label=T, lab.hjust=1.2, lab.nb.digits=1) compare_means(꽃받침길이 ~ 종류, data = mydata) ggbarplot(mydata, x="종류", y="꽃받침길이", fill="종류", add=c("mean_sd"), label=T, lab.hjust=1.2, lab.nb.digits=1) + stat_compare_means(label.x=1.7, method="anova") ggbarplot(mydata, x="종류", y="꽃받침길이", fill="종류", add=c("mean_sd"), label=T, lab.hjust=1.2, lab.nb.digits=1) + stat_compare_means(comparisons=list(c("쎄토사", "버시칼라"), c("버시칼라", "버지니카")), label="p.signif", label.y=c(7.3, 8))
3. 범주형 대 연속형 다. Wide format 데이터, 막대 그래프 그리기 library(ezpickr) mydata <- pick("data.xlsx", sheet=2) mydata.bar <- data.frame(탐구방법=mydata$method, 사전창의성=mydata$bcre, 사후창의성=mydata$acre) library(tidyr) mydata.bar <- gather(mydata.bar, key="전후", value="창의적사고역량", -c("탐구방법")) ggbarplot(mydata.bar, x="전후", y="창의적사고역량", fill="전후", add=c("mean_sd"))+ stat_compare_means(method="t.test", paired=T, label.x=1.3) ggbarplot(mydata.bar, x="탐구방법", y="창의적사고역량", fill="전후", add=c("mean_sd"), add.params = list(group = "전후"), position = position_dodge(0.8))+ stat_compare_means(aes(group = 전후), label="p.format", label.x=1.3)
4. 그래프 모아 그리기 library(cowplot) ggdraw( )+ draw_plot(plot1, x=0, y=0.5, width=0.6, height=0.5)+ draw_plot(plot2, x=0.6, y=0.5, width=0.4, height=0.5)+ draw_plot(plot3, x=0, y=0, width=1, height=0.5)