Various Tips in Data Visualization

홍찬우·2023년 7월 23일
0

Grid

x축, y축 따로 격자를 그릴 수 있음
항상 맨 밑에 오도록 조정 (zorder)


선 추가하기

  • 상한, 하한, 평균 등 다양한 선을 추가

면 추가하기


Setting 바꾸기

theme

  • 맨 위 테마가 default theme




실습

Grid

which

  • majortick, minortick 선택
  • minortick은 유저가 x 또는 y tick에서 따로 설정할 수 있음
  • ax.set_xticks(xticks의 구간을 나누는 array, **minor = True)**
  • ax.grid( ~ , which = ‘minor’)
  • which=’both’로 하면 major, minor tick 모두 grid

axis : grid의 방향 (x, y, both 방향)

linestyle : 선 형태 (점선, 실선, …)

linewidth : grid line 두께

zorder : 위치 (scatter와 겹치지 않기 위해 뒤로 배치)



x_start = np.linspace(0, 2.2, 12, endpoint=True)

for xs in x_start:
    ax.plot([xs, 0], [0, xs], linestyle='--', color='gray', alpha=0.5, linewidth=1)
  • grid() 함수를 사용하는 것이 아닌, 그래프의 점선, 두께, 투명도 등을 조정해 생성
  • 예를들어 x축이 수학 점수, y축이 영어 점수라 할 때, 두 점수의 합을 비교할 때 사용


radian = np.linspace(0, np.pi/2, 11, endpoint=True)

for rad in radian:
    ax.plot([0,2], [0, 2*np.tan(rad)], linestyle='--', 
						color='gray', alpha=0.5, linewidth=1)
  • π/2\pi/2 (90도)를 9등분하여 tan를 이용해 y값을 찾아냄
  • 수학 점수 대비 영어 점수가 얼마나 높은지와 같은 사례에 활용 (비율 정보)


for r in rs:
    xx = r*np.cos(np.linspace(0, 2*np.pi, 100))
    yy = r*np.sin(np.linspace(0, 2*np.pi, 100))
    ax.plot(xx+x[2], yy+y[2], linestyle='--', color='gray', alpha=0.5, linewidth=1)

    ax.text(x[2]+r*np.cos(np.pi/4), y[2]-r*np.sin(np.pi/4), f'{r:.1}', color='gray')
  • 원 공식을 이용해 동심원을 그려줌
  • 어떤 metric에서 point가 얼마나 떨어져있는지 확인




Line & Span

ax.axvline(0, color='red')
ax.axhline(0, color='green')

  • axvline으로 세로 선, axhline으로 가로 선 생성
  • ax.axvline(0, ymin=0.3, ymax=0.7, color='red')
    • ymin값과 ymax값으로 선의 영역도 지정 가능
    • y 값이 0.3~0.7이 아니라 축 기준으로 0.3 위치부터 0.7 위치까지를 의미


ax.axvline(math_mean, color='gray', linestyle='--')
ax.axhline(reading_mean, color='gray', linestyle='--')

ax.scatter(x=student['math score'], y=student['reading score'],
           alpha=0.5,
           color=['royalblue' if m>math_mean and r>reading_mean else 'gray'  for m, r in zip(student['math score'], student['reading score'])],
           zorder=10,
          )
  • 선과 색 대비를 이용해 뚜렷한 차이를 시각화할 수 있음


ax.axvspan(0,0.5, color='red')
ax.axhspan(0,0.5, color='green')

  • Line과 비슷하게 span 생성
  • ax.axvspan(0, ymin=0.3, ymax=0.7, color='red')
    • axvline과 동일


  • line과 유사하게 특정 영역을 강조할 수 있음




Spines

ax.spines

  • set_visible : plot 변 유무
  • set_linewidth : plot 변 두께
  • set_position : 선 위치
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_linewidth(1.5)
ax.spines['bottom'].set_linewidth(1.5)

  • 위, 오른쪽 변을 없애고 더 진한 두께로 설정


ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')

  • set_position을 통해 축의 위치를 바꾸며 plot 모양도 바꿈
  • center position 외에도 원하는 부분으로 옮길 수 있음
    • ax.spines[’left’].set_position((’data’, 0.3))

  • (‘data’, 0.3) 특정 데이터 0.3의 위치로 left spine 옮김
  • ax.spines[’left’].set_position((’axes’, 0.2))

  • (’axes’, 0.2) 축 기준 0.2의 위치에 bottom tick 옮김




Setting

plt.rcParams['lines.linewidth'] = 2
plt.rcParams['lines.linestyle'] = ':'
  • rcParams 를 이용해 기본 setting을 바꿔 plot의 default를 바꿀 수 있음
  • mpl.rc(’lines’, linewidth=2, linestyle=’:’)
    • 위 코드와 동일한 기능으로, 한 번에 가능
  • plc.rcParams.update(plt.rcParamsDefault) 를 이용해 default parameter로 돌려놓을 수 있음

theme

mpl.style.use(’ggplot’)

  • default 테마를 ggplot으로 변경
  • ggplot 외에 mpl.style.available 을 이용해 이용 가능한 테마들을 볼 수 있음
with plt.style.context('fivethirtyeight'):
    plt.plot(np.sin(np.linspace(0, 2 * np.pi)))
plt.show()
  • 기본 setting을 변경하는 것이 아닌, 한 plot에 대해서만 적용한다면 with 구문을 이용









※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글