ggplot2를 사용한 R의 산점도(예제 포함)

그래프는 데이터 분석 프로세스의 세 번째 부분입니다. 첫 번째 부분은 대략 데이터 추출, 두 번째 부분에서는 다음을 다룹니다. 데이터 정리 및 조작. 마침내 데이터 과학자는 다음을 수행해야 할 수도 있습니다. 결과를 그래픽으로 전달.

데이터 과학자의 직무는 다음 그림에서 검토할 수 있습니다.

  • 데이터 과학자의 첫 번째 임무는 연구 질문을 정의하는 것입니다. 이 연구 질문은 프로젝트의 목표와 목표에 따라 다릅니다.
  • 그 후 가장 눈에 띄는 작업 중 하나가 Feature Engineering입니다. 데이터 과학자는 데이터를 수집, 조작, 정리해야 합니다.
  • 이 단계가 완료되면 데이터 세트 탐색을 시작할 수 있습니다. 때로는 새로운 발견으로 인해 원래의 가설을 다듬고 변경해야 하는 경우도 있습니다.

R의 산점도

  • 설명 분석이 달성되면 데이터 과학자는 독자의 능력을 고려해야 합니다. 기본 개념과 모델을 이해하다.
  • 그의 결과는 모든 이해관계자가 이해할 수 있는 형식으로 제시되어야 합니다. 가장 좋은 방법 중 하나는 소통 결과는 그래프.
  • 그래프는 복잡한 분석을 단순화하는 놀라운 도구입니다.

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축 이름 변경

출력:

x축 및 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")

이 게시물을 요약하면 다음과 같습니다.