ggplot2를 사용한 R의 산점도(예제 포함)
그래프는 데이터 분석 프로세스의 세 번째 부분입니다. 첫 번째 부분은 대략 데이터 추출, 두 번째 부분에서는 다음을 다룹니다. 데이터 정리 및 조작. 마침내 데이터 과학자는 다음을 수행해야 할 수도 있습니다. 결과를 그래픽으로 전달.
데이터 과학자의 직무는 다음 그림에서 검토할 수 있습니다.
- 데이터 과학자의 첫 번째 임무는 연구 질문을 정의하는 것입니다. 이 연구 질문은 프로젝트의 목표와 목표에 따라 다릅니다.
- 그 후 가장 눈에 띄는 작업 중 하나가 Feature Engineering입니다. 데이터 과학자는 데이터를 수집, 조작, 정리해야 합니다.
- 이 단계가 완료되면 데이터 세트 탐색을 시작할 수 있습니다. 때로는 새로운 발견으로 인해 원래의 가설을 다듬고 변경해야 하는 경우도 있습니다.
- 때 설명 분석이 달성되면 데이터 과학자는 독자의 능력을 고려해야 합니다. 기본 개념과 모델을 이해하다.
- 그의 결과는 모든 이해관계자가 이해할 수 있는 형식으로 제시되어야 합니다. 가장 좋은 방법 중 하나는 소통 결과는 그래프.
- 그래프는 복잡한 분석을 단순화하는 놀라운 도구입니다.
ggplot2 패키지
튜토리얼의 이 부분은 R을 사용하여 그래프/차트를 만드는 방법에 중점을 둡니다.
이 튜토리얼에서는 ggplot2 패키지를 사용하겠습니다. 이 패키지는 2005년 Wilkinson이 쓴 Grammar of Graphics 책의 일관된 기반을 바탕으로 구축되었습니다. ggplot2는 매우 유연하며 높은 수준의 추상화에서 많은 테마와 플롯 사양을 통합합니다. ggplot2를 사용하면 3차원 그래픽을 플롯하고 대화형 그래픽을 만들 수 없습니다.
ggplot2에서 그래프는 다음 인수로 구성됩니다.
- 데이터
- 미적 매핑
- 기하학적 객체
- 통계적 변환
- 저울
- 좌표계
- 위치 조정
- 면처리
튜토리얼에서 이러한 인수를 제어하는 방법을 배우게 됩니다.
ggplot2의 기본 구문은 다음과 같습니다.
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
산포도
ggplot이 mtcars 데이터세트와 어떻게 작동하는지 살펴보겠습니다. mpg 변수와 drat 변수의 산점도를 그리는 것으로 시작합니다.
기본 산점도
library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
geom_point()
코드 설명
- 먼저 mtcars 데이터세트를 ggplot에 전달합니다.
- aes() 인수 내에 x축과 y축을 추가합니다.
- + 기호는 R이 코드를 계속 읽기를 원한다는 것을 의미합니다. 코드를 쪼개서 더 읽기 쉽게 만듭니다.
- 기하학적 객체에는 geom_point()를 사용합니다.
출력:
그룹이 있는 산점도
때로는 데이터 그룹(예: 요인 수준 데이터)별로 값을 구별하는 것이 흥미로울 수 있습니다.
ggplot(mtcars, aes(x = mpg, y = drat)) +
geom_point(aes(color = factor(gear)))
코드 설명
- geom_point() 내부의 aes()는 그룹의 색상을 제어합니다. 그룹은 요인변수여야 합니다. 따라서 가변 기어를 요소로 변환합니다.
- 전체적으로 점의 색상을 변경하는 코드 aes(color = Factor(gear))가 있습니다.
출력:
축 변경
데이터 크기를 조정하는 것은 데이터 과학자 작업의 큰 부분입니다. 드물지만 데이터가 멋진 종 모양으로 나타나는 경우도 있습니다. 데이터를 이상치에 덜 민감하게 만드는 한 가지 솔루션은 데이터 크기를 조정하는 것입니다.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
geom_point(aes(color = factor(gear)))
코드 설명
- aes() 매핑 내에서 직접 log()의 x 및 y 변수를 변환합니다.
표준화 또는 정규화와 같은 다른 변환을 적용할 수 있습니다.
출력:
적합치가 있는 산점도
그래프에 다른 수준의 정보를 추가할 수 있습니다. 선형 회귀의 적합치를 표시할 수 있습니다.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
geom_point(aes(color = factor(gear))) +
stat_smooth(method = "lm",
col = "#C42126",
se = FALSE,
size = 1)
my_graph
코드 설명
- 그래프: 그래프를 변수 그래프에 저장합니다. 이는 추가 사용에 도움이 되거나 너무 복잡한 코드 줄을 피하는 데 도움이 됩니다.
- stat_smooth() 인수는 스무딩 방법을 제어합니다.
- 방법 = “lm”: 선형 회귀
- col = “#C42126”: 선의 빨간색에 대한 코드
- se = FALSE: 표준 오류를 표시하지 않습니다.
- size = 1: 선의 크기는 1입니다.
출력:
다른 평활화 방법을 사용할 수 있습니다.
- glm
- gam
- 황토: 기본값
- 가장자리
그래프에 정보 추가
지금까지 그래프에 정보를 추가하지 않았습니다. 그래프는 유익해야 합니다. 독자는 추가 문서를 참조하지 않고도 그래프만 보고도 데이터 분석의 배경 스토리를 알 수 있어야 합니다. 따라서 그래프에는 좋은 레이블이 필요합니다. labs() 함수로 레이블을 추가할 수 있습니다.
lab()의 기본 구문은 다음과 같습니다.
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
제목 추가
추가해야 할 필수 정보 중 하나는 당연히 제목입니다.
my_graph +
labs(
title = "Plot Mile per hours and drat, in log"
)
코드 설명
- my_graph: 저장한 그래프를 사용합니다. 그래프에 새로운 정보를 추가할 때마다 모든 코드를 다시 작성하는 것을 방지합니다.
- lab() 내부에 제목을 래핑합니다.
- 선의 빨간색에 대한 코드
- se = FALSE: 표준 오류를 표시하지 않습니다.
- size = 1: 선의 크기는 1입니다.
출력:
동적 이름으로 제목 추가
동적 제목은 제목에 보다 정확한 정보를 추가하는 데 도움이 됩니다.
Paste() 함수를 사용하여 정적 텍스트와 동적 텍스트를 인쇄할 수 있습니다. Paste()의 기본 구문은 다음과 같습니다.
paste("This is a text", A)
arguments
- " ": Text inside the quotation marks are the static text
- A: Display the variable stored in A
- Note you can add as much static text and variable as you want. You need to separate them with a comma
예:
A <-2010
paste("The first year is", A)
출력:
## [1] "The first year is 2010"
B <-2018
paste("The first year is", A, "and the last year is", B)
출력:
## [1] "The first year is 2010 and the last year is 2018"
그래프에 mpg 평균이라는 동적 이름을 추가할 수 있습니다.
mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)
코드 설명
- 평균 mpg 변수에 저장된 평균(mtcars$mpg)을 사용하여 mpg의 평균을 생성합니다.
- mpg의 평균값을 반환하는 동적 제목을 생성하려면 평균_mpg와 함께 붙여넣기()를 사용합니다.
출력:
자막 추가
두 가지 추가 세부 사항을 통해 그래프를 더욱 명확하게 만들 수 있습니다. 자막과 캡션에 대해 이야기하고 있습니다. 부제목은 제목 바로 아래에 있습니다. 캡션을 통해 계산을 수행한 사람과 데이터 소스를 알 수 있습니다.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
코드 설명
- lab() 내부에 다음을 추가했습니다.
- title = “마일당 시간과 drat 간의 관계”: 제목 추가
- subtitle = "장비 클래스별 관계 분석": 부제 추가
- caption = “저자 자신의 계산: 캡션 추가
- 각각의 새 정보를 쉼표, ,로 구분합니다.
- 코드 줄이 끊어진다는 점에 유의하세요. 필수는 아니며 코드를 더 쉽게 읽는 데 도움이 됩니다.
출력:
x축 및 y축 이름 바꾸기
데이터 세트의 변수 자체는 항상 명시적이지 않거나 여러 단어가 있는 경우 관례에 따라 _를 사용합니다(예: GDP_CAP). 그래프에 그런 이름이 나타나지 않기를 바랍니다. 이름을 변경하거나 단위와 같은 세부 정보를 추가하는 것이 중요합니다.
my_graph +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
코드 설명
- lab() 내부에 다음을 추가했습니다.
- x = “Drat 정의”: x축 이름 변경
- y = “시간당 마일”: y축 이름 변경
출력:
저울 제어
축의 크기를 제어할 수 있습니다.
seq() 함수는 일련의 숫자를 생성해야 할 때 편리합니다. 기본 구문은 다음과 같습니다.
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
예를 들어, 0단계로 12~3까지의 범위를 만들려면 0, 4, 8, 12의 네 개의 숫자가 필요합니다.
seq(0, 12,4)
출력:
## [1] 0 4 8 12
아래와 같이 x축과 y축의 스케일을 제어할 수 있습니다.
my_graph +
scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
코드 설명
- scale_y_continuous() 함수는 y 축
- scale_x_continuous() 함수는 x 축.
- break 매개변수는 축 분할을 제어합니다. 숫자 시퀀스를 수동으로 추가하거나 seq() 함수를 사용할 수 있습니다.
- seq(1, 3.6, by = 0.2): 2.4씩 증가하면서 3.4에서 3까지 XNUMX개의 숫자를 생성합니다.
- seq(1, 1.6, by = 0.1): 1부터 1.6까지 1씩 증가하면서 XNUMX개의 숫자를 생성합니다.
출력:
테마
마지막으로 R을 사용하면 다양한 테마로 플롯을 사용자 정의할 수 있습니다. ggplot2 라이브러리에는 XNUMX가지 테마가 포함되어 있습니다.
- theme_bw()
- theme_light()
- theme_classis()
- theme_linedraw()
- theme_dark()
- theme_minimal()
- 테마_회색()
- theme_void()
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
출력:
플롯 저장
이 모든 단계를 마친 후에는 그래프를 저장하고 공유할 차례입니다. 그래프를 그린 직후에 ggsave('NAME OF THE FILE)을 추가하면 하드 드라이브에 저장됩니다.
그래프는 작업 디렉터리에 저장됩니다. 작업 디렉터리를 확인하려면 다음 코드를 실행하면 됩니다.
directory <-getwd() directory
환상적인 그래프를 그려서 저장하고 위치를 확인해 보세요
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
출력:
ggsave("my_fantastic_plot.png")
출력:
## Saving 5 x 4 in image
주의 사항: 교육적 목적으로만 디렉토리 폴더를 열어주는 open_folder()라는 함수를 만들었습니다. 아래 코드를 실행하고 사진이 어디에 저장되어 있는지 확인하기만 하면 됩니다. my_fantastic_plot.png 파일 이름이 표시되어야 합니다.
# Run this code to create the
function
open_folder <- function(dir) {
if (.Platform['OS.type'] == "windows") {
shell.exec(dir)
} else {
system(paste(Sys.getenv("R_BROWSER"), dir))
}
}
# Call the
function to open the folder open_folder(directory)
제품 개요
산점도를 만드는 데 필요한 인수를 아래 표에 요약할 수 있습니다.
| 목표 | 암호 |
|---|---|
| 기본 산점도 |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| 색상 그룹이 있는 산점도 |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
| 적합치 추가 |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
| 제목 추가 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
|
| 자막 추가 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
|
| x 이름 바꾸기 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
| y 이름 바꾸기 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
| 규모를 제어 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
| 로그 생성 |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
| 테마 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
| 찜하기 |
ggsave("my_fantastic_plot.png")
|












