본문 바로가기
6. 데이터 시각화 - ggplot2/산점도

[R ggplot2] 두 데이터를 하나의 산점도 그래프에 그릴 때 범례 및 색 설정

by makhimh 2022. 5. 13.
반응형

(x,y)로 대응되어 있는 데이터가 두 종류 있다고 합시다. 

data1=data.frame(x1=1:10,y1=dnorm(1:10))
data2=data.frame(x2=1:10,y2=dchisq(1:10,3))


하나의 그래프에 두 데이터의 산점도를 그려봅시다. 

 

library(ggplot2)

ggplot()+
  geom_point(data=data1, aes(x=x1,y=y1))+
  geom_point(data=data2, aes(x=x2,y=y2))

 

 

범례를 설정해볼 것인데요. 여기서 많은 분들이 헷갈려하는 부분이 나옵니다. 아마 아래와 같이 색을 구분하려고 할 것입니다. 

 

ggplot()+
  geom_point(data=data1, aes(x=x1,y=y1),color='red')+
  geom_point(data=data2, aes(x=x2,y=y2),color='blue')+
  theme(legend.position = 'top')

 

그리고 범례를 그리려고 하면 그려지지 않습니다. 범례는 aes 안에 입력된 color 옵션에만 반응합니다. 먼저 아래와 같이 바꿔봅시다. 

 

ggplot()+
  geom_point(data=data1, aes(x=x1,y=y1,color='red'))+
  geom_point(data=data2, aes(x=x2,y=y2,color='blue'))+
  theme(legend.position = 'top')

 

 

문제가 있습니다. 범례의 색이 자기 멋대로 설정이 되었고, 범례 이름도 색이름이 되었습니다. aes 안에 입력하는 color 옵션은 색을 설정하는 옵션이 아닙니다. 범례를 무엇으로 구분할지를 입력하는 것입니다. 산점도를 여러개로 나누는 독립변수를 입력하는 옵션인데, 산점도를 여러개로 나누는 독립변수가 없습니다. 이럴 때는 아무 문자나 입력하면, 입력한 문자가 각 데이터의 범례이름이 됩니다. 각 데이터 이름을 입력해줍시다. 

 

data1=data.frame(x1=1:10,y1=dnorm(1:10))
data2=data.frame(x2=1:10,y2=dchisq(1:10,3))

library(ggplot2)

ggplot()+
  geom_point(data=data1, aes(x=x1,y=y1,color='data1'))+
  geom_point(data=data2, aes(x=x2,y=y2,color='data2'))+
  theme(legend.position = 'top')

 

 

여전히 색은 자동설정된 색입니다. 색을 변경할 때는 scale_color_manual 함수를 이용합니다. 

 

ggplot()+
  geom_point(data=data1, aes(x=x1,y=y1,color='data1'))+
  geom_point(data=data2, aes(x=x2,y=y2,color='data2'))+
  theme(legend.position = 'top')+
  scale_color_manual(values=c('red','blue'))

 

 

반응형

댓글