R-Studio 3Dpie, histogram 그리기.

R-Studio의 차트 그리기.

Featured image

R-Studio 도 함수를 만들 수 있다.

차트를 그리기에 앞서 차트를 그릴 인자 값의 자료형이 행렬 혹은 벡터 여야 한다.
본래 차트 함수에 legend 인자가 있는경우 legend() 함수의 단독 함수 사용이 대부분 가능하다.

사용된 함수

Use Descriptions
pie(x...) 기본 파이 차트 그리기. ?pie 해보자.
install.packages("plotrix") library(plotrix) 3D모형의 pie plot
hist(x...) 히스토그램 차트. 빈도수 표현의 최적
rainbow(리턴받을 rgb코드 의 갯수) 자료의 구분마다 색을 출력해줌.
legend(x...) legend값이 있는 차트에 범례를 그려줌.

파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
교통 사고 데이터.csv
2000-2013년 연령별실업율_연령별평균_세로.csv

사용 예시 소스코드

traffic <- read.csv("교통 사고 데이터.csv")
str(traffic) # 구조 요약
summary(traffic) # 데이타 프레임 요약


unique(traffic$사고유형_대분류)
# [1] 차대사람 차량단독 차대차  
# Levels: 차대사람 차대차 차량단독

# table : 빈도 별 카테고리를 작성 하여 표를 만들어줌
circle <- table(traffic$사고유형_대분류)
circle
# 차대사람   차대차 차량단독 
# 1647     1646      826 

# 자료형 확인
mode(circle)
class(circle)

# init.angle : pie 차트의 위상 각
# 레이블 붙히기
myLabels01 <- paste(names(circle), "\n", circle)
pie(x = circle, main = "사고 유형", col = myColor, init.angle = 45, labels = myLabels01)

# 다른 차트
install.packages("plotrix")
library(plotrix)
# ?pie3D.labels

# 3D파이차트
pieCusChar <- pie3D(circle, main = "파이차트")
# 3D파이차트 레이블 붙히기
pec <- paste(names(circle), "\n", round(circle/sum(circle)*100, 2), "%")
pie3D.labels(pieCusChar, labels = pec, labelcex = 0.8)

# "도로형태_대분류" 로 파이 그래프 그리기
table01 <- table(traffic$도로형태_대분류)
priCusChar01 <- pie3D(table01, main = "도로형태 대분류")

# 파이 차트 그리기
pec01 <- paste(names(table01), "\n", round(table01/sum(table01)*100, 2), "%")
pie3D.labels(priCusChar01, labels = pec01, labelcex = 0.8, minsep = 1.1)

# 히스토그램 그리기
students <- read.csv("students_height.csv", header = T)
students

# 정보 확인
summary(students)

# density : 밀도
# 키 값으로 히스토 그램 그리기(빈도수 차트)
height <- students$
hist_Info <- hist(height)

# 빈도 ON
hist_Info <- hist(height, freq = T)

# 빈도 OFF
# 정보를 출력해줌.
hist_Info <- hist(height, freq = F)
attributes(hist_Info)
hist_Info

# 빈도 계산
# 확률 밀도 총합.
totalSum <- sum(hist_Info$density)
totalSum

# 계급 * 확률 밀도의 총합
# 네모 박스의 넓이 가 결국 총합.
all_prop <- sum(totalSum * 5)
all_prop

# 빈도수 더 쪼개기(breaks)
# 빈도 기준을 쪼개면 더 세세해 진다.
histinfo <- hist(height, breaks = 10)
histinfo <- hist(height, breaks = 20)

# 커스텀 breaks
custom_brk <- seq(150, 190, 5)
custom_brk
histinfo <- hist(height, breaks = custom_brk)

# 바 속성 색상 주기
myColor <- rainbow(15)
histinfo <- hist(height, breaks = 10, main = "학생들의 키", col = myColor, xlim = c(159, 185))

# 경상자수
height01 <- table(traffic$경상자수)
histinfo01 <- hist(height01, main = "경상자들수")
histinfo01

# 
v1 <- c(10, 12, 15, 11, 20)
v2 <- c(5, 7, 15, 8, 9)
v3 <- c(11, 20, 15, 18, 13)

# 통계개념에 의해서 15가 이상치
# boxstats <- boxplot(v1, v2, v3, col=rainbow(3), names=c('B', 'Y', 'P'), horizontal = F) #default
boxstats <- boxplot(v1, v2, v3, col=rainbow(3), names=c('B', 'Y', 'P'), horizontal = T)

# 목록중 stats 를 보면 최소 최대 사분위계수를 알 수 있다.
# n은 각 그룹당 값 갯수
# out은 이상치 를 이야기함. 여기서 이상치는 15
# out은 그룹과 같이 보아야 한다.
# names는 컬럼 이름
boxstats

######################################################################################

getColorValue <- function(vec) {
  
  return(rainbow(length(vec)))
}

data <- read.csv("2000-2013년 연령별실업율_연령별평균_세로.csv")
str(data) # 구조
# 'data.frame':	14 obs. of  6 variables:
#   $ 연도     : Factor w/ 14 levels "2000년","2001년",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ X20대    : num  7.5 7.4 6.6 7.7 7.9 7.7 7.7 7.1 7 7.9 ...
# $ X30대    : num  3.6 3.2 2.9 3 3.1 3.3 3 3.2 3.1 3.6 ...
# $ X40대    : num  3.5 3 2 2.2 2.3 2.6 2.3 2 2.1 2.5 ...
# $ X50대    : num  3.3 2.8 2 2.2 2.3 2.5 2.2 2.1 2 2.5 ...
# $ X60세이상: num  1.5 1.2 1.1 1 1.2 1.3 1.4 1.4 1.2 1.6 ...
dim(data) # 14행 6열
# [1] 14  6
head(data) # 확인해보기기
# 연도 X20대 X30대 X40대 X50대 X60세이상
# 1 2000년   7.5   3.6   3.5   3.3       1.5
# 2 2001년   7.4   3.2   3.0   2.8       1.2
# 3 2002년   6.6   2.9   2.0   2.0       1.1
# 4 2003년   7.7   3.0   2.2   2.2       1.0
# 5 2004년   7.9   3.1   2.3   2.3       1.2
# 6 2005년   7.7   3.3   2.6   2.5       1.3

# 컬럼이름 바꾸기
colnames(data) <- c("연도", "20대", "30대", "40대", "50대", "60대이상")
age_20 <- data$`20대`
plot(age_20, xlab="", ylab="", main="연령별 실업율 현황", col="violet", type="o", lwd=2, axes=F, ylim=c(0, 11))

len <- c(3:6)
mycolor <- getColorValue(len)

# for문으로 꺾은선 그리기
for(idx in len) {
  age <- data[, idx]
  # las : 2를 주면 90도 회전
  lines(age, col=mycolor[idx-2], type='o', lwd=2)
}

# 
rowsu <- nrow(data)
rowsu

colname <- data$연도
colname

# x, y 레이블 그려줌. 그리기 전에 먼저 plot 함수에 axes=F 를 인자로 줘야함.
# X레이블 side값이 1:x 2:y
axis(side=1, at=1:rowsu, label=colname, las=2)
# y레이블
axis(side=2, las=1)

# 가이드선 그리기.
abline(h=seq(0, 10, 1), v=seq(1, rowsu, 1), lty=2, lwd=2)

# 우측 상단 범례 그리기
column_name <- colnames(data[2:6])
column_name
# gsub(바뀔단어, 새단어, 작업대상) sub:sutstitute
# new_column_name <- gsub('X', ', column_name')

colors <- getColorValue(column_name)
# x : topright(오른쪽 위), bg : 범례 바탕색
legend(x = "topright", column_name, cex=0.8, col=colors, lty=1, lwd=2, bg="white")