import matplotlib.pyplot as plt
matplotlib 모듈의 하위 모듈인 pyplot을 import하면 그래프 작성에 필요한 기능을 일일이 호출하지 않아도 된다.
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.legend()
plt.xlim([0,5])
plt.ylim([0, 15])
plt.xscale('linear')
plt.yscale('log')
맷플롯립으로 축 레이블, 범례, 축 범위, 축 스케일을 커스터마이징 할 수 있다.
plt.plot([1, 2, 3], [4, 4, 4], '-', label='solid')
plt.plot([1, 2, 3], [2, 2, 2], linestyle='dotted', label='dotted')
plt.plot([4, 5, 6], "b")
plt.plot([2, 3, 4], marker="s")
plt.plot([1, 2, 3], [4, 5, 6], color='violet')
선과 관련된 옵션으로는 선의 종류, 마커, 선의 색상을 커스터마이징 할 수 있다.
plt.title('subtitle')
plt.suptitle('supertitle')
제목 관련 옵션으로는 슈퍼 타이틀과 서브 타이틀이 있다.
그룹으로 그래프를 만들었을 때, 슈퍼타이틀은 그 그룹 전체의 제목, 서브타이틀은 각각의 그래프의 제목이다.
plt.xticks(x, years)
plt.grid(True, linestyle='--', linewidth=0.5, color='gray', alpha=0.7)
plt.text(i, value + 1, str(value), ha='center', va='bottom', color='black', fontsize=10)
그래프의 배경과 관련해서는 눈금, 그리드, 텍스트 추가가 있다.
plt.plot(pclass_survived_mean['Pclass'], pclass_survived_mean['Survived'], marker='o', linestyle='-', color='violet')
plt.bar(survived_counts.index, survived_counts, color= ['mediumorchid', 'darkviolet', 'indigo'])
bars = plt.barh(survived_counts.index, survived_counts, color=['darkturquoise', 'salmon'])
plt.axvline(x=survived_counts['male'], color='gray', linestyle='--', linewidth=1)
scatter = plt.scatter(x='Age', y='Fare', data=titanic, c=titanic['Survived'], cmap='Set2', alpha=0.7)
plt.legend(handles=scatter.legend_elements()[0], title='Survived', labels=['Not Survived', 'Survived'], loc='upper right')
plt.pie(survived_counts, labels=['Not Survived', 'Survived'], colors=['orange', 'gold'] autopct='$0.1f%%', startangle=90, shadow=True, explode=(0, 0.1))
plt.hist(titanic['Age'], bins=20, color='seagreen', edgecolor='black')
선 그래프는 특정 값에 대한 추이를 보여줄 때 유용, plot(x축값, y축값, x축 포인트, 선스타일, 색) 을 통해 그릴 수 있다.
막대 그래프
- 수직 막대 그래프: 시계열 데이터와 같이 시간에 따른 데이터의 변화를 보여줄 때 적합, plt.bar(x축값, 막대의 높이로 나타날 값, 색상)을 통해 그릴 수 있다.
- 수평 막대 그래프: 두 범주 간의 차이를 수평으로 비교할 때 유용, plt.barh(y축 값으로 사용할 값, 막대의 너비로 나타날 값, 색)을 통해 그릴 수 있다. plt.axvline()을 통해 수평선을 추가하여 차이를 시각적으로 강조하는 데 도움을 줄 수 있다.
산점도 그래프는 두 변수 간의 관계를 시각적으로 나타내는 데 유용, 변수 간의 상관 관계, 분포, 군집 등을 파악
산점도 그래프를 그리기 전에 결측치를 제거하는 이유: 그래프의 해석이 어려워지고, 잘못된 결과를 얻을 수 있다.
plt.scatter()을 통해 그릴 수 있다. c는 색상, cmap은 컬러맵, alpha는 투명도를 나타낸다.
handles=scatter.legend_elements()[0]은 범례 핸들을 설정한다.
파이 차트는 전체 데이터에서 특정 요소의 비율을 시각적으로 나타내기 좋음, plt.pie()를 통해 그릴 수 있다.
autopct='%0.1f%%'는 각 범주의 백분율을 소수점 첫 번째 자리까지 표시, explode는 범주별 튀어나옴의 정도
히스토그램은 수치형 데이터의 분포를 확인하는 데 사용, plt.hist()을 통해 그릴 수 있다. bins는 구간 개수이다.
correlation_matrix = titanic.drop('PassengerId', axis=1).corr(numeric_only=True)
plt.matshow(correlation_matrix, cmap='PuRd_r')
히트맵: 2차원 데이터를 색상으로 표현하는 그래프, 행렬 형태의 데이터를 시각화 할 때 자주 사용, 값이 진할 수록 연관성이 높다. corr() 함수는 변수들 간의 상관 행렬을 계산
plt.fill_between(survived_counts.index.astype(str), survived_counts[1], color='purple', alpha=0.9, label-'Survived')
영역 채우기 그래프: 두 개의 선 또는 곡선 사이의 영역을 칠하여 강조하는 그래프, 데이터셋 간의 데이터 분포와 차이를 명확하게 시각화하는데 유용, plt.fill_between()을 통해 그릴 수 있다.
plt.boxplot([titanic['Pclass'] == 1]['Age'],
titanic['Pclass'] == 2]['Age'],
titanic['Pclass'] == 3]['Age']],
labels=['1st Class', '2nd Class', '3rd Class'])
박스 플롯: 데이터의 분포와 중앙값, 이상치를 시각적으로 나타내는 그래프
- 박스: 데이터의 1사분위와 3사분위를 표현, 상자 내부의 가로선은 데이터의 중앙값
- 수염: 박스플롯에서 1.5배 IQR 범위 내의 데이터 중 최소값과 최대값을 시각화
- 이상치: 수염을 벗어난 범위에 위치한 데이터를 점으로 나타냄
violin_plot = plt.violinplot([titanic['Pclass'] == 1]['Age'],
titanic['Pclass'] == 2]['Age'],
titanic['Pclass'] == 3]['Age']],
showmeans=False, showmedians=True)
바이올린 플롯: 데이터 분포를 시각적으로 표현, 동일한 범주 내에서 데이터 간의 분포를 비교하거나 이상치를 탐지할 때 사용, 데이터 포인트의 밀도를 시각적으로 보여줌, 밀도 분포를 추정하는 데 활용
plt.errorbar(fare_means.index, fare_means, yerr=fare_std, fmt=]o], capsize=5, capthick=1, label='Fare')
에러 바: 통계적 불확실성 또는 편차를 시각적으로 표현, 주로 그래프나 차트에 사용하여 데이터 포인트 주변의 오차 또는 편차 범위를 표시하는 데 활용 yerr는 에러바의 길이로 사용
plt.subplot(nrow, ncols, index)
plt.subplots(nrows, ncols, sharex, sharey)
fig, ax1 = plt.subplots()
ax1.plot(x, y1, '-s', color='indigo', markersize=7, linewidth=5, alpha=0.7, label='Not Survived')
ax2.twinx()
ax2.bar(x, y2, color='deeppink', alpha=0.7, width=0.7, label='Survived')
- 개별 서브플롯을 하나씩 생성: 새 서브플롯을 생성할 때, 인덱스로 figure 내에서의 서브플롯 위치를 지정해야 한다.
- 개별 서브플롯을 동시에 생성: figure 내에 있는 서브플롯에 접근할 때 인덱스가 아니라 함수가 반환한 축 배열을 활용
- 하나의 서브플롯에 여러 그래프 그리기: twinx()함수를 사용하여 하나의 x축과 두 개의 y축 이용
plt.savefig('/content/histogram.jpg', format='jpg')
그래프 저장하기: savefig() 함수 사용, savefig() 함수를 호출한 이후에 plt.show()를 호출하면 저장된 이미지가 비어 있을 수 있기 때문에 저장할 때는 plt.show()를 사용하지 않는 것이 좋다.
+박스플롯과 선 그래프를 twinx() 했을 때 선 그래프가 박스 플롯과 x축이 완전히 똑같게 겹쳐지지 않아 챗gpt를 통해 해결
'데이터 분석 > 파이썬 데이터 분석가 되기+챗GPT' 카테고리의 다른 글
3장 연습문제 (0) | 2025.01.25 |
---|---|
2장 연습문제 (0) | 2025.01.20 |
02장 데이터 처리 라이브러리, 판다스 (0) | 2025.01.20 |
1장 연습문제 (0) | 2025.01.13 |
01장 수치 계산 라이브러리, 넘파이 (0) | 2025.01.13 |