본문 바로가기

시각화/Matplotlib

Matplotlib - 그래프 그릴 때 헷갈리는 부분 정리

반응형

 

위 데이터프레임의 mpg 컬럼과 horsepower 컬럼의 관계를 살펴보자

 

 

 

 

scatter 이용

 

 

[하나의 그래프]

 

1. plt

 

plt.scatter() plt.plot.scatter() plt.plot(kind='scatter')
가능

- xlabel, ylabel 등은 수동으로 추가해야 함

- data 옵션 이용 여부에 따라 컬럼 연산 가능/불가능

- 사이즈는 plt.figure(figsize=(N, N))으로 조정
불가능 불가능

 

 

data 옵션 없이

 

 

 

data 옵션 이용

 

 

 

 

 

크기(figsize) 조정

 

 

 

 

 

 

 

2. 데이터프레임(시리즈).plot

 

df.plot.scatter / df.plot(kind='scatter')

모두 가능
- plot 메서드 안에서 figsize 조절 가능

- label이 자동으로 생겨남

 

 

 

 

 

 

크기(figsize) 조정

 

 

 

한 줄로 그릴 수 있고, 크기도 조정할 수 있다.

 

 

 

 

 

 

 

3. ax = plt.subplots()

 

ax=plt.scatter(x=df['mpg'], y=df['horsepower']) 잘 그려짐
+
컬럼에 연산 가능
ax=plt.scatter(x='mpg', y='horsepower', data=df) 잘 그려짐
(컬럼에 연산 불가)
ax=df.plot.scatter(x='mpg', y='horsepower')  ax 객체에 그려지지 않고 새로운 기본 틀에 그려짐

 

이상 없음

 

 

 

이상 없음

 

 

 

 

이상 있음

 

 

 

 

[하나의 그래프 결론]

 

단순히 컬럼만 (추가적 연산 등 없이)이용하고 살펴보기만 할 거라면

 

2번 방법(데이터프레임.plot)이 편해보인다.

 

 

 

 

 

 

 

 

 

[하나의 그래프 + 컬럼에 연산 적용]

 

horsepower 컬럼에 log10을 씌운다.

 

 

1. plt.scatter()

data  옵션 이용하지 않음

 

 

위 방법은 어찌됐든 df을 통째로 불러와서 하는 작업이므로

 

log10을 씌워도

 

에러 없이 원하는 결과를 그려낸다.

 

 

 

 

당연하게도 data 옵션을 이용하면 에러가 발생한다.

 

 

 

 

2. 데이터프레임(시리즈).plot

 

 

이 방법 또한 불가능하다.

 

 

 

[하나의 그래프 + 컬럼에 연산 적용 결론]

 

컬럼에 어떤 작업을 한다면 data 옵션 없이 plt를 이용한 1번 방법을 이용해야 한다.

 

 

 

 

 

 

 

 

[두개 이상의 그래프(add_subplot)]

fig = plt.figure()

ax = fig.add_subplot()

 

 

1. ax

 

ax.scatter() ax.plot.scatter() ax.scatter(kind='scatter')
가능

- xlabel, ylabel 등은 수동으로 추가

- data 옵션 이용 여부에 따라 컬럼 연산 가능/불가능

- plt.figure(figsize=(N, N))로 크기 조정
불가능 불가능

 

 

data 옵션 없이

 

 

ax객체에는 바로 그래프의 종류를 명시해서 그려야한다.

 

ax.plot.scatter나 ax.plot(kind='scatter')는 에러가 발생한다.

 

 

우측의 그래프는 horsepower컬럼에 log10을 씌웠는데 문제 없이 그려졌다.

 

x, y축의 label은 따로 명시해줘야 한다.

 

 

 

 

data 옵션 이용

 

 

 

 

data 옵션을 이용해도 ax.scatter를 이용해서 위치 할당하며 그릴 순 있으나

 

 

 

이 역시 마찬가지로 컬럼에 연산할 수 없다.

 

 

 

 

 

2. df.plot

 

 

ax객체를 이용하지 않고 바로 df.plot을 이용하므로

 

위치 할당이 불가능 하다.

 

또한

 

 

 

컬럼에 연산을 적용해도 에러가 발생한다.

 

 

 

 

 

 

 

[두개 이상의 그래프(add_subplot) 결론]

 

2번 방법은 애초에 위치 할당도, 컬럼에 연산도 불가능 하다.

 

컬럼에 연산이 필요한지 여부에 따라 1번 방법을 적재적소에 사용하면 된다.

 

 

 

plt.___  바로 그래프의 종류 (scatter, hist, ..., pie) 명시
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.___
바로 그래프의 종류 (scatter, hist, ..., pie) 명시

 

 

다음 포스팅에선 subplots()를 구분해보자

 

반응형