데이터 시각화에 관해서, 화려한 그래프는 재미있을 수 있습니다. 그러나 특히 광범위한 잠재 고객에게 정보를 전달하려는 경우, 화려하지 않아 항상가는 길은 아닙니다.

이 기사에서는 R에서 분산 형 플롯을 만드는 방법에 대해 설명하려고합니다. 특히 s 함수를 ggplot사용하여 분산 형 플롯을 작성 합니다.ggplotgeom_point

분산 형 플롯은 점을 사용하여 두 개의 다른 변수 값을 그래프로 표시하는 2 차원 데이터 시각화입니다. 하나는 x 축을 따르고 다른 하나는 y 축을 따라 그래프로 나타냅니다. 분산 형 플롯은 종종 두 변수 사이의 관계 (또는 관계 부족)를 평가하려는 경우에 사용됩니다.

Scatter Plot of Adam Sandler Movies from FiveThirtyEight

아담 샌들러 영화의 5ThirtyEight Scatter Plot
예를 들어,이 그래프에서 FiveThirtyEight는이 산점도를 만들기 위해 일련의 Adam Sandler 영화에 대해 Rotten Tomatoes 등급과 Box Office 총칭을 사용합니다. 그들은 또한 영화를 3 가지 범주로 그룹화했으며 각기 다른 색으로 강조 표시되었습니다.

수명에 대한 유명한 Gapminder 산포 플롯 대 국가 별 수입

국가 별 Gapminder 예상 수명 대 소득
처음에는 Hans Rosling이 만든이 산점도는 데이터 시각화 실무자들 사이에서 유명합니다. 전 세계 국가의 예상 수명 대 소득을 그래프로 나타냅니다. 또한 점의 크기를 사용하여 국가 인구와 대륙을 매핑하는 점의 색을 매핑하여 기존 분산 형 플롯에 2 개의 추가 변수를 추가합니다.

한스 로슬 링 (Hans Rosling)은이 데이터를 생생하게 만들기 위해 유명하고 자극적 인 프리젠 테이션 스타일을 사용했습니다. 그는 Gapminder Foundation을 통해 지속 가능한 글로벌 개발을 옹호하기 위해 프리젠 테이션을 사용했습니다.

Hans Rosling의 예는 제대로 사용되면 간단한 그래픽 스타일이 통신 및 변경을위한 강력한 도구가 될 수있는 방법을 보여줍니다! 확신 해? 이 가이드에서 R에 ggplot scatter plot을 작성해 보겠습니다.

워크 북을 따라 가십시오.

나는 당신이 읽는 동안 배운 것을 적용 할 수 있도록 무료 통합 문서 를 만들었 습니다.

통합 문서는이 게시물에 표시된 모든 코드뿐만 아니라 주제를 더 깊이 이해하는 데 도움이되는 추가 질문 및 연습을 포함하는 R 파일입니다.

R에서 분산 형 플롯을 만드는 방법을 실제로 배우고 싶다면 지금부터 몇 주 또는 몇 달 후에도 기억할 것입니다. 연습해야합니다.

이제 통합 문서를 다운로드 하고이 게시물을 읽으면서 연습하십시오!

ggplot 소개

R에 분산 형 플롯을 작성하기 위해 ggplot 코드를 작성하기 전에 R에서 ggplot그래프를 그릴 때 가장 좋은 선택이라고 생각하는 이유 를 간단히 설명하고자합니다 .

ggplot R로 그래프를 만드는 패키지이지만, 복잡한 그래프를 생각하고 논리적 인 서브 유닛으로 분해하는 방법이기도합니다.

ggplot그래프, 축, 눈금, 색, 객체 등의 각 구성 요소를 취해 한 번에 한 구성 요소 씩 순차적으로 그래프를 작성할 수 있습니다. 그런 다음 각 구성 요소를 유연하고 사용하기 쉬운 방식으로 수정할 수 있습니다. 구성 요소가 지정되지 않은 경우 ggplot적절한 기본값을 사용합니다. 이것은 ggplotR로 모든 종류의 그래프를 생성하기위한 강력하고 유연한 도구를 만듭니다. 저는 요즘 만드는 거의 모든 그래프를 만드는 데 사용하는 도구이며, 여러분도 사용해야한다고 생각합니다!

데이터 세트 조사

이 게시물을 통해 mtcarsR에 내장 된 데이터 세트를 사용할 것입니다 .이 데이터 세트에는 32 대의 자동차에 대한 설계 및 성능에 대한 세부 정보가 포함되어 있습니다. 어떻게 생겼는지 살펴 보겠습니다.

mtcars 데이터 세트의 스 니펫
mtcars 데이터 세트에는 11 개의 열이 있습니다.

  • mpg: 마일 / (미국) 갤런
  • cyl: 실린더 수
  • disp: 변위 (cu.in.)
  • hp: 총 마력
  • drat: 리어 액슬 비율
  • wt: 무게 (1000lbs)
  • qsec: 1/4 마일 시간
  • vs: 엔진 (0 = V 형, 1 = 직선)
  • am: 변속기 (0 = 자동, 1 = 수동)
  • gear: 전진 기어 수
  • carb: 기화기 수

geom_point ()를 사용하여 R에서 간단한 분산 플롯을 만드는 방법

ggplot기하 구조 또는 기하학적 객체를 사용하여 다양한 유형의 그래프의 기초를 형성합니다. 이전에는 선 그래프 생성에 사용되는 geom_line에 대해 이야기했습니다 . 오늘 geom_point은 R에 산포도를 만드는 데 초점을 맞출 것 입니다.

센터

여기에서 우리는 ggplot사용 가능한 가장 단순한 산점도 부터 시작합니다 geom_point. 좀 더 자세히 살펴 보겠습니다.

먼저 ggplot새로운 ggplot그래프 를 만드는 것을 부릅니다 . 그것은 본질적으로 데이터와 그래픽을 추가 할 빈 캔버스입니다. 이 경우 mtcars를 전달하여이 ggplot특정 스 ggplot캐터 플롯에 대해 mtcars 데이터를 사용할 것임을 나타냅니다 .

다음으로, 이 산점도를 만들기 위해 geom_point기본 ggplot그래프에 대한 호출을 추가했습니다 . 에서 ggplot, 당신은 사용하는 +기존의 그래프에 새로운 레이어를 추가하는 기호. 이 제 2 계층에서, I는 말 ggplot사용 wtx 축의 변수로하고 mpg, Y 축 변수.

그리고 그게 전부입니다, 우리는 산산이 음모를 가지고 있습니다! 평균적으로 자동차 중량이 증가함에 따라 갤런 당 마일이 감소하는 경향이 있음을 보여줍니다.

ggplot scatter plot의 점 색상 변경

이 예제를 확장하면 스 캐터 플롯에서 색상을 사용할 수 있습니다.

센터

이 geom_point호출은 이전과 동일하지만 color = 'blue'행의 끝에 수식자를 추가했다는 점만 제외하면 알 수 있습니다. 다른 색상으로 약간 실험 해보고이 색상이 컴퓨터에서 어떻게 작동하는지 확인하십시오. 생각할 수있는 대부분의 색상 이름을 사용하거나 특정 16 진수 색상 코드를 사용하여보다 세분화 된 색상 이름을 사용할 수 있습니다.

자, 조금 다른 것을 시도해 봅시다. ggplot아래 코드를 방금 실행 한 코드와 비교하십시오 . 3 가지 차이점이 있습니다. 당신이 그들을 찾을 수 있는지, 그리고 무슨 일이 일어날 지 짐작하고, 결과를 살펴보기 위해 아래로 스크롤하십시오. 이전 ggplot가이드를 읽었다면 이 비트가 익숙해 져야합니다!

센터

이 그래프는 이전과 동일한 데이터를 표시하지만 두 가지 색상이 있습니다. 빨간색 점은 자동 변속기 차량에 해당하며 파란색 점은 수동 변속기 차량을 나타냅니다. 그래프를 변경하는 데 사용한 3 가지 변경 사항을 파악 했습니까? 그들은 다음과 같습니다 :

  1. 먼저 am변수를 하나의 요인으로 변환했습니다 . 우리가하지 않으면 어떻게 될까? 시도 해봐!
  2. 지정하는 대신 color = 'blue'지정된color = am
  3. aes()괄호 안의 color 매개 변수를 이동했습니다.

다음 각 변경 사항을 검토해 보겠습니다.

am변수를 인수로 변환

데이터 세트에서 am처음에는 숫자 변수였습니다. 실행하여이를 확인할 수 있습니다 class(mtcars$am). 색상 스케일에 숫자 변수를 전달 ggplot하면 연속 색상 스케일이 만들어집니다.

그러나이 경우 am자동 및 수동 변속기에 해당하는 필드 값은 2 개뿐입니다 . 따라서 그래프의 두 값에 2 가지 색상 옵션을 사용하여 개별 색상 스케일을 사용하는 것이 더 명확합니다 am. 우리 am는 위에서와 같이 필드를 숫자 값에서 계수 로 변환하여이 작업을 수행 할 수 있습니다 .

직접적으로이 전환의 유무에 상관없이 그래프를 작성해보십시오. 이미 factor로 변환 한 경우 실행하여 데이터 집합을 다시로드하여 data(mtcars)숫자로 그래프로 표시 할 수 있습니다 !

이 점은 약간 까다 롭습니다. 이 게시물에 대한 내 통합 문서를 확인 하여이 문제를 자세히 조사하십시오!

괄호 안에 지정 color = am및 이동aes()

나는이 두 가지 변화가 함께 작용하기 때문에 이것들을 조합하고있다.

전에 우리는 우리의 부름 ggplot에 덧붙여 점의 색깔을 파란색으로 바꾸 라고 했습니다 .color = 'blue'geom_point()

여기서 우리가하는 일은 좀 더 복잡합니다. 포인트에 단일 색상을 지정하는 대신 열의 데이터를 미적 ggplot으로 매핑 하는 방법을 알려줍니다 .amcolor

즉 ggplotam데이터 의 각 값에 다른 색상을 사용 한다는 의미입니다 . 이 매핑은 또한 ggplot전송 유형을 식별하는 범례를 작성해야한다는 것을 알 수 있으며 자동으로 전송 유형을 배치합니다.

ggplot scatter plot의 포인트 모양 변경하기

관련 예제를 살펴 보겠습니다. 이번에는 산점도에서 점의 색상을 변경하는 대신 점의 모양을 변경합니다.

센터

이 스 ggplot캐터 플롯의 코드는 방금 검토 한 코드와 동일하지만 대체 shape하지 않습니다 color. 생성 된 그래프는 매우 유사하지만 그래프에서 다른 색상 대신 다른 모양 (삼각형 및 원)을 사용합니다. 예를 들어, 흑백으로 인쇄 할 때 이와 같은 것을 사용할 수도 있습니다.

aes()ggplot 의 (미학) 매핑에 대한 심층적 인 리뷰

우리는 방금 변수를 산포도의 색상이나 모양으로 ggplot매핑하는 그래프를 만드는 방법을 보았습니다 amggplot이러한 매핑을 미적 매핑으로 지칭 aes()하며 ggplot에서 볼 수있는 모든 것을 포함합니다 .

미학 맵핑은 데이터의 변수를 그래프의 특정 시각적 속성 (미학)에 매핑하는 방법입니다 .

이론적으로는 조금 들리지만, 이미 보았던 특정 미학 맵핑과 geom_point에서 사용할 수있는 다른 맵핑을 검토합시다.

geom_point 미학 맵핑 목록 검토

ggplot scatter plot의 주요 미적 매핑은 다음과 같습니다.

  • x: 변수를 X 축의 위치에 매핑
  • y: 변수를 y 축의 한 위치에 매핑
  • color: 변수를 점 색상으로 매핑
  • shape: 변수를 점 모양으로 매핑
  • size: 변수를 포인트 크기에 매핑
  • alpha: 점 투명도에 변수 매핑

위의 목록에서, 우리는 이미 본 것 xycolor, 그리고 shape미적 매핑.

x그리고 y우리의 처음에 사용 무엇 ggplot우리는 변수 매핑 여기서 산점도 예 wt와 mpgX 축 및 Y 축 값한다. 그런 다음, 우리가 사용하는 실험 color과 shape맵에 am다른 색깔의 점 또는 모양에 변수를.

그 외에도 일반적으로 사용되는 2 개의 다른 미적 매핑이 geom_point있습니다. 우리는 alpha우리의 그래프에서 포인트의 투명도를 변경 하기 위해 미적 감각을 사용할 수 있습니다 . 마지막으로, size미학을 사용하여 산점도에서 점의 크기를 변경할 수 있습니다.

ggplot scatter plot stroke,, 및에 대한 두 개의 추가 미적인 매핑이 fill있지만 여기서는 다루지 않을 것입니다. shapes특정 용도 로만 사용 되며이 가이드의 범위를 벗어나는 매우 구체적인 사용 사례가 있습니다.

sizeggplot scatter plot 의 미적 매핑 변경하기

센터

위의 코드에서 실린더 수 ( cyl)를 ggplot의 크기 미학에 매핑합니다. 이 그래프에는 더 많은 실린더가있는 자동차가 더 큰 점으로 표시됩니다.

참고 : 점의 크기가 데이터의 변수에 따라 달라지는 분산 형 플롯을 버블 차트라고도합니다. 위의 산포도는 거품 형 차트로 간주 될 수 있습니다!

일반적으로 더 많은 실린더가있는 자동차는 그래프의 오른쪽 하단에 밀집되어있는 경향이 있으며, 무게가 더 크고 갤런 당 마일이 적으며 실린더 수가 적은 차량이 왼쪽 상단에 있습니다. 즉, 오른쪽 하단 모서리에있는 모든 포인트를 확인하는 것은 약간 어렵습니다. 그 문제를 어떻게 해결할 수 있습니까? 알아내는 알파 미학에 대해 더 자세히 배우자!

alpha미학과 함께 ggplot scatter plot의 투명도 변경하기

센터

이 코드에서는 알파 미학을 변수에 매핑했습니다 cyl. 더 적은 실린더를 가진 자동차는 더 투명하게 보이고, 더 많은 실린더를 가진 자동차는 더 불투명하다. 그러나이 경우 데이터의 관계를 더 잘 이해하는 데 도움이된다고 생각하지 않습니다. 대신, 오른쪽 하단에 포인트를 강조하는 것처럼 보입니다. 나는 이것이 나쁜 그래프라고 생각한다!

우리는 그래프의 가독성을 향상시키기 위해 알파 미학을 어떻게 사용할 수 있습니까? 실린더를 크기 변수에 매핑 한 위의 코드에서 다시 버블 차트를 작성해 보겠습니다. 오른쪽 하단의 모든 자동차를 만드는 것이 어려웠던 점을 기억하십니까? 그래프의 모든 점을 반투명하여 겹치는 거품을 볼 수 있다면 어떨까요? 해보자!

센터

이렇게하면 오른쪽 하단의 큰 차를 클러스터링하는 것이 훨씬 쉬워지며 왼쪽 상단의 중요도는 낮추지 않습니다! 이것은 ggplot에서 알파 미학을 가장 좋아하는 용도입니다. 투명도를 추가하여 밀도가 높은 점 영역에 대한 통찰력을 높입니다.

ggplot의 미적인 매핑 대 매개 변수

위에서 우리는 colorgeom_point와 함께 두 가지 다른 방법으로 사용할 수 있음을 알았습니다. 먼저, 매핑의 color = 'blue' 범위 를 지정하여 포인트의 색상을 파란색으로 설정할 수있었습니다 aes(). 그런 다음 매핑의 내부 를 지정 하여 변수 를 색상에 매핑 할 수있었습니다 .amcolor = am aes()

마찬가지로 우리는 alpha미학 을 사용하는 두 가지 다른 방법을 보았습니다 . 먼저 매핑 의 내부 를 cyl지정 하여 변수 를 알파에 매핑했습니다. 그런 다음 매핑 외부 를 지정하여 모든 점의 알파를 0.3으로 설정 합니다.alpha = cyl aes()alpha = 0.3 aes()

우리가 사용할 수있는 미적 매핑을 다루는이 두 가지 방법의 차이점은 무엇입니까?

여러분이 보았던 각각의 미학 맵핑은 매개 변수 , 즉 aes()미적 맵핑 외부에 정의 된 고정 값 으로 사용될 수도 있습니다 . color = 'blue'위의 그림과 같이 산점도를 파란색으로 만들 때 색상으로이를 수행하는 방법을 보았습니다 . 0.3으로 투명도를 설정할 때 알파로 이것을하는 법을 보았습니다 alpha = 0.3. 이제 같은 방법으로 도형을 사용하여이 작업을 수행하는 방법의 예를 살펴 보겠습니다.

센터

여기서는 모양 18을 사용하도록 지정합니다.이 모양은 여기에서 볼 수있는 다이아몬드 모양과 일치합니다. 우리가 이것을 외부 의 것으로 지정했기 때문에 aes(), 이것은이 그래프의 모든 포인트에 적용됩니다!

값 것을 검토하기 위해 shapesize그리고 alpha바로 실행, 동의 ?shape?size또는 ?alpha콘솔 창에서! 더 자세한 내용은 체크 아웃하십시오.vignette("ggplot2-specs")

ggplot의 미학 맵핑 및 매개 변수와 관련된 일반적인 오류

R과 ggplot을 처음 배울 때, 미학 맵핑 ( 귀하의 내부에 포함 된 값 aes())과 매개 변수 ( 귀하의 외부에 있는 값 aes())의 차이는 계속해서 혼란 스러웠습니다. 다행히도, 시간이 지남에 따라 이것이 제 2의 천성이된다는 것을 알게 될 것입니다. 그러나 그 동안, 나는 당신이 눈을 뗄 수없는 몇 가지 흔한 실수들로이 과정을 가속화하도록 도와 줄 수 있습니다.

미적 매핑을 포함하려고 노력하는 외부 사용자의 aes()전화

cyl변수를 에 매핑하려는 경우 호출 범위 내에 shape포함해야 합니다 . 실수로 외부에 포함시키고 대신 실행하면 어떻게됩니까 ? 다음과 같은 오류 메시지가 나타납니다.shape = cylaes()geom_pointggplot(mtcars) + geom_point(aes(x = wt, y = mpg), shape = cyl)

ggplot geom_line 오류 메시지
당신이 찾을 수없는 개체에 대한이 오류를 볼 때마다, 당신은 당신의 미적 매핑을 포함하고 있는지 확인하십시오 내부aes() 전화!

매개 변수를 지정하려고 내에서 당신의 aes()전화

우리가 (예를 들어, 특정 매개 변수 값을 포함하려고하면 다른 한편으로는, color = 'blue'의 내부) aes()매핑, 오류가 조금 덜 분명하다. 보세요:

센터

이 경우 ggplot실제로 산점도가 생성되지만 의도 한 것과 다릅니다.

우선, 우리가 바라는 파란색 대신에 포인트가 모두 빨간색입니다! 또한 그래프에는 단순히 ‘청색’이라고하는 전설이 있습니다.

무슨 일 이니? 후드 아래에서 ggplot문자열 ‘blue’를 가져 와서 모든 단순 값이 ‘blue’라고하는 새로운 숨겨진 데이터 열을 효과적으로 만들었습니다. 그런 다음, 우리는 이전에 우리가 지정한 때와 마찬가지로 그 열을 색상 미학으로 매핑 합니다 color = am. 그러면 범례 레이블과 모든 점의 색이 파란색으로 설정되지 않고 기본 색으로 설정됩니다 ggplot.

이것이 혼란 스럽다면 지금은 괜찮습니다. 그냥 기억 : 당신은 두 번 체크는 당신이 당신의 그래프의 매개 변수를 포함하고 있는지이 같은 문제로 실행하면 외부 사용자의 aes()전화!

ggplot분산 형 플롯 함수를 사용하여 R에서 분산 형 플롯을 만드는 방법을 확실하게 이해해야합니다 geom_point.

이해를 확고히하기 위해 배운 것을 실험 해보십시오. 당신은 할 수 있습니다 내 무료 통합 문서를 다운로드 하여 자신을 통해 일을이 문서에서 코드.

나는 스스로 코드를 작성하는 것이 새로운 주제를 배우는 가장 좋은 방법이라는 것을 발견했다. 그래서 나는 미래에 내 자신 만의 일을해야 할 때 실제로 기억할 것이다.

지금 학습서를 다운로드하여 학습 한 내용을 연습하십시오!

 

 

When it comes to data visualization, flashy graphs can be fun. But if you’re trying to convey information, especially to a broad audience, flashy isn’t always the way to go.

Last week I showed how to work with line graphs in R.

In this article, I’m going to talk about creating a scatter plot in R. Specifically, we’ll be creating a ggplot scatter plot using ggplot‘s geom_point function.

A scatter plot is a two-dimensional data visualization that uses points to graph the values of two different variables – one along the x-axis and the other along the y-axis. Scatter plots are often used when you want to assess the relationship (or lack of relationship) between the two variables being plotted.

Scatter Plot of Adam Sandler Movies from FiveThirtyEight

FiveThirtyEight Scatter Plot of Adam Sandler Movies
For example, in this graph, FiveThirtyEight uses Rotten Tomatoes ratings and Box Office gross for a series of Adam Sandler movies to create this scatter plot. They’ve additionally grouped the movies into 3 categories, highlighted in different colors.

The Famous Gapminder Scatter Plot of Life Expectancy vs. Income by Country

Gapminder Scatter Plot of Life Expectancy vs. Income by Country
This scatter plot, initially created by Hans Rosling, is famous among data visualization practitioners. It graphs the life expectancy vs. income for countries around the world. It also uses the size of the points to map country population and the color of the points to map continents, adding 2 additional variables to the traditional scatter plot.

Hans Rosling used a famously provocative and animated presentation style to make this data come alive. He used his presentations to advocate for sustainable global development through the Gapminder Foundation.

Hans Rosling’s example shows how simple graphic styles can be powerful tools for communication and change when used properly! Convinced? Let’s dive into this guide to creating a ggplot scatter plot in R!

Follow Along With the Workbook

I’ve created a free workbook to help you apply what you’re learning as you read.

The workbook is an R file that contains all the code shown in this post as well as additional questions and exercises to help you understand the topic even deeper.

If you want to really learn how to create a scatter plot in R so that you’ll still remember weeks or even months from now, you need to practice.

So Download the workbook now and practice as you read this post!

Introduction to ggplot

Before we get into the ggplot code to create a scatter plot in R, I want to briefly touch on ggplot and why I think it’s the best choice for plotting graphs in R.

ggplot is a package for creating graphs in R, but it’s also a method of thinking about and decomposing complex graphs into logical subunits.

ggplot takes each component of a graph–axes, scales, colors, objects, etc–and allows you to build graphs up sequentially one component at a time. You can then modify each of those components in a way that’s both flexible and user-friendly. When components are unspecified, ggplot uses sensible defaults. This makes ggplot a powerful and flexible tool for creating all kinds of graphs in R. It’s the tool I use to create nearly every graph I make these days, and I think you should use it too!

Investigating our dataset

Throughout this post, we’ll be using the mtcars dataset that’s built into R. This dataset contains details of design and performance for 32 cars. Let’s take a look to see what it looks like:

A snippet of the mtcars dataset
The mtcars dataset contains 11 columns:

  • mpg: Miles/(US) gallon
  • cyl: Number of cylinders
  • disp: Displacement (cu.in.)
  • hp: Gross horsepower
  • drat: Rear axle ratio
  • wt: Weight (1000 lbs)
  • qsec: 1/4 mile time
  • vs: Engine (0 = V-shaped, 1 = straight)
  • am: Transmission (0 = automatic, 1 = manual)
  • gear: Number of forward gears
  • carb: Number of carburetors

How to create a simple scatter plot in R using geom_point()

ggplot uses geoms, or geometric objects, to form the basis of different types of graphs. Previously I talked about geom_line, which is used to produce line graphs. Today I’ll be focusing on geom_point, which is used to create scatter plots in R.

center

Here we are starting with the simplest possible ggplot scatter plot we can create using geom_point. Let’s review this in more detail:

First, I call ggplot, which creates a new ggplot graph. It’s essentially a blank canvas on which we’ll add our data and graphics. In this case, I passed mtcars to ggplot to indicate that we’ll be using the mtcars data for this particular ggplot scatter plot.

Next, I added my geom_point call to the base ggplot graph in order to create this scatter plot. In ggplot, you use the + symbol to add new layers to an existing graph. In this second layer, I told ggplot to use wt as the x-axis variable and mpg as the y-axis variable.

And that’s it, we have our scatter plot! It shows that, on average, as the weight of cars increase, the miles-per-gallon tends to fall.

Changing point color in a ggplot scatter plot

Expanding on this example, we can now play with colors in our scatter plot.

center

You’ll note that this geom_point call is identical to the one before, except that we’ve added the modifier color = 'blue' to to end of the line. Experiment a bit with different colors to see how this works on your machine. You can use most color names you can think of, or you can use specific hex colors codes to get more granular.

Now, let’s try something a little different. Compare the ggplot code below to the code we just executed above. There are 3 differences. See if you can find them and guess what will happen, then scroll down to take a look at the result. If you’ve read my previous ggplot guides, this bit should look familiar!

center

This graph shows the same data as before, but now there are two different colors! The red dots correspond to automatic transmission vehicles, while the blue dots represent manual transmission vehicles. Did you catch the 3 changes we used to change the graph? They were:

  1. First, we converted the am variable to a factor. What do you think happens if we don’t do this? Give it a try!
  2. Instead of specifying color = 'blue', we specified color = am
  3. We moved the color parameter inside of the aes() parentheses

Let’s review each of these changes:

Converting the am variable to a factor

In the dataset, am was initially a numeric variable. You can check this by running class(mtcars$am). When you pass a numeric variable to a color scale in ggplot, it creates a continuous color scale.

In this case, however, there are only 2 values for the am field, corresponding to automatic and manual transmission. So it makes our graph more clear to use a discrete color scale, with 2 color options for the two values of am. We can accomplish this by converting the am field from a numeric value to a factor, as we did above.

On your own, try graphing both with and without this conversion to factor. If you’ve already converted to factor, you can reload the dataset by running data(mtcars) to try graphing as numeric!

This point is a bit tricky. Check out my workbook for this post for a guided exploration of this issue in more detail!

Specifying color = am and moving it within the aes() parentheses

I’m combining these because these two changes work together.

Before, we told ggplot to change the color of the points to blue by adding color = 'blue' to our geom_point() call.

What we’re doing here is a bit more complex. Instead of specifying a single color for our points, we’re telling ggplot to map the data in the am column to the color aesthetic.

This means we are telling ggplot to use a different color for each value of am in our data! This mapping also lets ggplot know that it also needs to create a legend to identify the transmission types, and it places it there automatically!

Changing point shapes in a ggplot scatter plot

Let’s look at a related example. This time, instead of changing the color of the points in our scatter plot, we will change the shape of the points:

center

The code for this ggplot scatter plot is identical to the code we just reviewed, except we’ve substituted shape for color. The graph produced is quite similar, but it uses different shapes (triangles and circles) instead of different colors in the graph. You might consider using something like this when printing in black and white, for example.

A deeper review of aes() (aesthetic) mappings in ggplot

We just saw how we can create graphs in ggplot that map the am variable to color or shape in a scatter plot. ggplot refers to these mappings as aesthetic mappings, and they include everything you see within the aes() in ggplot.

Aesthetic mappings are a way of mapping variables in your data to particular visual properties (aesthetics) of a graph.

I know this can sound a bit theoretical, so let’s review the specific aesthetic mappings you’ve already seen as well as the other mappings available within geom_point.

Reviewing the list of geom_point aesthetic mappings

The main aesthetic mappings for a ggplot scatter plot include:

  • x: Map a variable to a position on the x-axis
  • y: Map a variable to a position on the y-axis
  • color: Map a variable to a point color
  • shape: Map a variable to a point shape
  • size: Map a variable to a point size
  • alpha: Map a variable to a point transparency

From the list above, we’ve already seen the xycolor, and shape aesthetic mappings.

x and y are what we used in our first ggplot scatter plot example where we mapped the variables wt and mpg to x-axis and y-axis values. Then, we experimented with using color and shape to map the am variable to different colored points or shapes.

In addition to those, there are 2 other aesthetic mappings commonly used with geom_point. We can use the alpha aesthetic to change the transparency of the points in our graph. Finally, the size aesthetic can be used to change the size of the points in our scatter plot.

Note there are two additional aesthetic mappings for ggplot scatter plots, stroke, and fill, but I’m not going to cover them here. They’re only used for particular shapes, and have very specific use cases beyond the scope of this guide.

Changing the size aesthetic mapping in a ggplot scatter plot

center

In the code above, we map the number of cylinders (cyl), to the size aesthetic in ggplot. Cars with more cylinders display as larger points in this graph.

Note: A scatter plot where the size of the points vary based on a variable in the data is sometimes called a bubble chart. The scatter plot above could be considered a bubble chart!

In general, we see that cars with more cylinders tend to be clustered in the bottom right of the graph, with larger weights and lower miles per gallon, while those with fewer cylinders are on the top left. That said, it’s a bit hard to make out all the points in the bottom right corner. How can we solve that issue? Let’s learn more about the alpha aesthetic to find out!

Changing transparency in a ggplot scatter plot with the alpha aesthetic

center

In this code we’ve mapped the alpha aesthetic to the variable cyl. Cars with fewer cylinders appear more transparent, while those with more cylinders are more opaque. But in this case, I don’t think this helps us to understand relationships in the data any better. Instead, it just seems to highlight the points on the bottom right. I think this is a bad graph!

How else can we use the alpha aesthetic to improve the readability of our graph? Let’s turn back to our code from above where we mapped the cylinders to the size variable, creating what I called a bubble chart. Remember how it was difficult to make out all of the cars in the bottom right? What if we made all of the points in the graph semi-transparent so that we can see through the bubbles that are overlapping? Let’s try!

center

This makes it much easier to see the clustering of larger cars in the bottom right while not reducing the importance of those points in the top left! This is my favorite use of the alpha aesthetic in ggplot: adding transparency to get more insight into dense regions of points.

Aesthetic mappings vs. parameters in ggplot

Above, we saw that we are able to use color in two different ways with geom_point. First, we were able to set the color of our points to blue by specifying color = 'blue'outside of our aes() mappings. Then, we were able to map the variable am to color by specifying color = am inside of our aes() mappings.

Similarly, we saw two different ways to use the alpha aesthetic as well. First, we mapped the variable cyl to alpha by specifying alpha = cyl inside of our aes() mappings. Then, we set the alpha of all points to 0.3 by specifying alpha = 0.3 outside of our aes() mappings.

What is the difference between these two ways of dealing with the aesthetic mappings available to us?

Each of the aesthetic mappings you’ve seen can also be used as a parameter, that is, a fixed value defined outside of the aes() aesthetic mappings. You saw how to do this with color when we made the scatter plot points blue with color = 'blue' above. Then, you saw how to do this with alpha when we set the transparency to 0.3 with alpha = 0.3. Now let’s look at an example of how to do this with shape in the same manner:

center

Here, we specify to use shape 18, which corresponds to this diamond shape you see here. Because we specified this outside of the aes(), this applies to all of the points in this graph!

To review what values shapesize, and alpha accept, just run ?shape?size, or ?alpha from your console window! For even more details, check out vignette("ggplot2-specs")

Common errors with aesthetic mappings and parameters in ggplot

When I was first learning R and ggplot, the difference between aesthetic mappings (the values included inside your aes()), and parameters (the ones outside your aes()) was constantly confusing me. Luckily, over time, you’ll find that this becomes second nature. But in the meantime, I can help you speed along this process with a few common errors that you can keep an eye out for.

Trying to include aesthetic mappings outside your aes() call

If you’re trying to map the cyl variable to shape, you should include shape = cyl within the aes() of your geom_point call. What happens if you include it outside accidentally, and instead run ggplot(mtcars) + geom_point(aes(x = wt, y = mpg), shape = cyl)? You’ll get an error message that looks like this:

ggplot geom_line error message
Whenever you see this error about object not found, be sure to check that you’re including your aesthetic mappings inside the aes() call!

Trying to specify parameters inside your aes() call

On the other hand, if we try including a specific parameter value (for example, color = 'blue') inside of the aes() mapping, the error is a bit less obvious. Take a look:

center

In this case, ggplot actually does produce a scatter plot, but it’s not what we intended.

For starters, the points are all red instead of the blue we were hoping for! Also, there’s a legend in the graph that simply says ‘blue’.

What’s going on here? Under the hood, ggplot has taken the string ‘blue’ and effectively created a new hidden column of data where every value simple says ‘blue’. Then, it’s mapped that column to the color aesthetic, like we saw before when we specified color = am. This results in the legend label and the color of all the points being set, not to blue, but to the default color in ggplot.

If this is confusing, that’s okay for now. Just remember: when you run into issues like this, double check to make sure you’re including the parameters of your graph outside your aes() call!

You should now have a solid understanding of how to create a scatter plot in R using the ggplot scatter plot function, geom_point!

Experiment with the things you’ve learned to solidify your understanding. You can download my free workbook with the code from this article to work through on your own.

I’ve found that working through code on my own is the best way for me to learn new topics so that I’ll actually remember them when I need to do things on my own in the future.

Download the workbook now to practice what you learned!

소스: R의 ggplot Scatter Plot 상세 가이드