반응형
matplotlib을 이용하여 컬럼수가 많을 때 컬러 그래프 만들기¶
- 라인 그래프와 컬러 그래프를 사용하여 컬럼수가 많을 때 상대적으로 이해가 쉬운 방식을 찾아봅니다.
In [1]:
import numpy as np
import pandas as pd
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
In [2]:
# 18개 지역의 3월 온도 변화량 샘플데이터를 평균온도 7.7 편차가 1.5인 정규분포를 사용하여 생성하는 코드는 아래와 같습니다.
# 3월 평균 온도
mu = 7.7
# 3월 평균 편차
sigma = 1.5
endofdate = 31
# 지역
place_num = 18
temperature_data = []
for i in range(place_num):
# 평균(mu), 표준편차(sigma) 기반 정규분포 가정하에 num_samples 만큼 데이터 생성
temp_list = np.random.normal(mu, sigma, endofdate)
temperature_data.append(temp_list)
temperature_data = np.array(temperature_data)
In [ ]:
In [3]:
# 데이터프레임을 이용하여 샘플데이터 확인하기
pd.set_option('display.float_format', '{:.1f}'.format)
place_list = [f"place_{n+1}" for n in range(place_num)]
df = pd.DataFrame(temperature_data.T, columns=place_list)
df
Out[3]:
place_1 | place_2 | place_3 | place_4 | place_5 | place_6 | place_7 | place_8 | place_9 | place_10 | place_11 | place_12 | place_13 | place_14 | place_15 | place_16 | place_17 | place_18 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 9.1 | 8.5 | 8.0 | 8.5 | 6.1 | 7.0 | 8.6 | 9.5 | 5.8 | 8.8 | 7.0 | 5.4 | 6.9 | 6.6 | 9.7 | 11.6 | 6.2 | 8.8 |
1 | 7.1 | 7.1 | 4.9 | 4.4 | 8.1 | 9.3 | 7.7 | 7.0 | 6.8 | 10.7 | 6.5 | 7.8 | 6.8 | 9.8 | 6.9 | 6.9 | 7.3 | 5.0 |
2 | 8.4 | 7.4 | 10.0 | 9.3 | 5.5 | 7.4 | 7.4 | 7.6 | 8.7 | 8.3 | 7.7 | 7.6 | 8.4 | 8.7 | 9.0 | 9.0 | 10.4 | 8.9 |
3 | 5.5 | 9.2 | 10.1 | 8.3 | 8.8 | 7.1 | 8.0 | 6.6 | 8.8 | 10.3 | 9.3 | 6.2 | 7.8 | 10.2 | 6.6 | 8.4 | 9.9 | 8.1 |
4 | 6.0 | 8.3 | 12.1 | 7.7 | 9.4 | 8.9 | 11.2 | 6.1 | 9.9 | 7.0 | 6.0 | 11.4 | 7.0 | 7.3 | 2.8 | 9.4 | 7.4 | 9.3 |
5 | 6.0 | 9.6 | 6.3 | 8.8 | 6.7 | 10.2 | 9.5 | 9.2 | 9.1 | 8.3 | 8.6 | 8.1 | 10.0 | 9.3 | 5.8 | 8.2 | 8.5 | 8.7 |
6 | 6.8 | 6.2 | 7.7 | 7.9 | 5.7 | 8.3 | 8.0 | 7.3 | 6.9 | 6.1 | 12.0 | 9.6 | 7.2 | 8.9 | 8.6 | 8.5 | 5.5 | 4.0 |
7 | 9.6 | 7.1 | 9.8 | 7.2 | 5.2 | 7.1 | 9.6 | 6.9 | 10.7 | 5.1 | 5.6 | 9.3 | 6.2 | 7.1 | 9.9 | 5.9 | 8.1 | 7.6 |
8 | 7.1 | 7.8 | 7.7 | 8.1 | 5.7 | 5.5 | 8.6 | 7.8 | 7.5 | 9.5 | 8.6 | 9.6 | 4.0 | 7.1 | 8.2 | 5.7 | 4.5 | 7.8 |
9 | 9.0 | 8.4 | 5.2 | 9.0 | 7.9 | 6.4 | 8.6 | 8.5 | 7.3 | 7.1 | 10.1 | 6.9 | 5.7 | 6.9 | 7.2 | 7.5 | 8.8 | 9.8 |
10 | 7.9 | 10.0 | 9.2 | 5.6 | 7.9 | 6.4 | 6.9 | 6.3 | 5.2 | 7.1 | 7.3 | 6.4 | 9.5 | 7.6 | 7.1 | 8.5 | 7.9 | 6.9 |
11 | 7.5 | 8.9 | 8.6 | 7.5 | 8.6 | 8.7 | 6.8 | 7.5 | 5.5 | 10.2 | 6.5 | 9.2 | 8.6 | 9.8 | 9.1 | 7.7 | 6.9 | 9.4 |
12 | 6.0 | 7.0 | 10.2 | 9.2 | 7.7 | 7.1 | 8.6 | 6.7 | 7.1 | 6.4 | 9.9 | 6.6 | 7.8 | 7.8 | 8.1 | 6.7 | 6.1 | 8.4 |
13 | 7.6 | 7.3 | 5.7 | 7.2 | 8.8 | 9.7 | 7.9 | 9.0 | 6.7 | 10.0 | 7.7 | 6.3 | 8.0 | 5.0 | 8.0 | 5.3 | 7.1 | 8.1 |
14 | 6.5 | 7.0 | 8.2 | 6.8 | 8.3 | 8.3 | 6.7 | 7.9 | 7.5 | 8.1 | 11.7 | 12.2 | 7.6 | 9.7 | 6.4 | 7.0 | 6.8 | 7.5 |
15 | 10.3 | 9.2 | 7.6 | 7.3 | 9.9 | 5.8 | 5.1 | 8.3 | 7.7 | 10.2 | 8.0 | 9.2 | 4.6 | 7.1 | 11.8 | 6.2 | 6.1 | 7.9 |
16 | 6.3 | 6.9 | 7.0 | 9.5 | 8.2 | 5.1 | 9.7 | 8.0 | 6.3 | 7.8 | 9.0 | 8.3 | 8.8 | 6.9 | 8.8 | 9.0 | 10.9 | 8.3 |
17 | 7.4 | 5.1 | 10.4 | 8.7 | 6.6 | 6.7 | 9.4 | 10.9 | 7.2 | 7.3 | 10.1 | 9.3 | 7.2 | 6.1 | 9.3 | 9.5 | 6.6 | 8.6 |
18 | 7.2 | 7.9 | 8.0 | 7.0 | 8.2 | 7.2 | 7.9 | 7.6 | 9.3 | 8.1 | 7.9 | 6.8 | 6.3 | 8.1 | 7.8 | 7.0 | 8.4 | 8.0 |
19 | 9.0 | 5.5 | 6.2 | 7.5 | 8.5 | 8.0 | 6.6 | 6.9 | 9.6 | 9.2 | 5.8 | 9.1 | 8.7 | 7.4 | 5.5 | 8.1 | 9.6 | 8.4 |
20 | 5.4 | 7.1 | 6.8 | 9.1 | 7.5 | 6.9 | 6.3 | 5.5 | 7.0 | 10.1 | 4.5 | 8.4 | 9.0 | 5.9 | 9.2 | 7.5 | 7.6 | 6.5 |
21 | 11.2 | 9.4 | 7.9 | 6.6 | 8.8 | 9.2 | 6.9 | 9.5 | 4.5 | 5.9 | 8.0 | 8.8 | 6.8 | 7.9 | 8.2 | 8.6 | 7.9 | 8.3 |
22 | 7.4 | 7.7 | 10.5 | 6.6 | 8.7 | 7.0 | 7.0 | 8.1 | 7.8 | 7.1 | 7.1 | 10.1 | 6.2 | 8.1 | 8.9 | 5.7 | 9.0 | 8.1 |
23 | 8.5 | 9.0 | 5.5 | 10.0 | 8.0 | 8.4 | 10.2 | 8.7 | 5.0 | 8.5 | 5.6 | 8.9 | 6.7 | 6.2 | 9.4 | 7.5 | 7.2 | 9.7 |
24 | 7.7 | 8.1 | 6.3 | 9.5 | 6.7 | 10.4 | 6.4 | 7.0 | 7.2 | 10.9 | 8.2 | 7.8 | 3.6 | 6.2 | 8.0 | 9.8 | 6.8 | 9.0 |
25 | 7.6 | 6.7 | 7.7 | 9.0 | 10.9 | 9.4 | 9.0 | 9.0 | 7.5 | 6.3 | 6.6 | 6.0 | 7.8 | 7.4 | 6.0 | 8.5 | 7.4 | 10.4 |
26 | 8.4 | 6.7 | 5.5 | 7.1 | 9.2 | 8.0 | 10.0 | 9.4 | 4.8 | 8.0 | 5.9 | 11.5 | 10.9 | 6.0 | 9.3 | 6.4 | 8.2 | 9.9 |
27 | 8.2 | 6.7 | 7.0 | 6.6 | 9.6 | 5.9 | 10.8 | 8.8 | 7.6 | 7.2 | 8.8 | 8.2 | 6.1 | 6.0 | 7.0 | 6.3 | 7.6 | 8.6 |
28 | 9.7 | 6.0 | 8.1 | 7.1 | 8.1 | 5.9 | 9.1 | 8.5 | 7.3 | 5.2 | 8.3 | 8.6 | 7.0 | 10.6 | 10.3 | 6.1 | 8.7 | 8.0 |
29 | 6.9 | 5.4 | 10.2 | 4.1 | 10.4 | 8.4 | 6.7 | 5.8 | 6.1 | 8.6 | 7.8 | 10.6 | 2.4 | 8.8 | 6.5 | 9.2 | 7.9 | 10.2 |
30 | 7.7 | 8.9 | 12.0 | 5.7 | 7.9 | 9.7 | 8.6 | 8.6 | 7.6 | 9.4 | 8.8 | 6.9 | 7.6 | 5.3 | 10.6 | 5.7 | 8.9 | 8.0 |
- 컬럼 수가 많은 데이터에 대해 라인그래프로 표현할 경우 아래 그래프를 보면 직관적으로 이해하기 어렵다는 것을 알 수 있다.
In [4]:
## 온도 변화량을 라인 그래프로 그리기
# 사이즈 조절
plt.figure(figsize=(place_num, endofdate))
# 라인그래프 추가
for line in temperature_data:
plt.plot(line)
# x 축 이름 작성
plt.xlabel("date")
# y 축 이름 작성
plt.ylabel("temperature")
# 라인 특성 작성
plt.legend(place_list, fontsize=12, loc='best')
# 그래프 표시
plt.show()
In [5]:
# 그래프 삭제
plt.clf()
<Figure size 432x288 with 0 Axes>
- 진한 빨간색으로 갈수록 높은 온도를 나타내고 진한 파란색으로 갈수록 온도가 낮아지게 컬러 그래프를 사용하면 상대적으로 이해가 쉬움을 알 수 있다.
In [6]:
## 컬러 그래프 그리기
# 사이즈 조절
plt.figure(figsize=(place_num, endofdate))
# 색상 그래프 표현 (cmap으로 컬러 스타일 지정 후 vmax로 최대값 고정)
plt.imshow(temperature_data, cmap=cm.coolwarm, vmax=np.max(temperature_data))
# 오른쪽 컬러바 그리기(shrink 를 이용한 사이즈 조절)
plt.colorbar(shrink=0.25)
# x 축 이름 작성
plt.xlabel("date")
# y 축 값 지정
plt.yticks(ticks=np.arange(0, place_num), labels=place_list)
# y 축 이름 작성
plt.ylabel("place")
plt.show()
place_12
지역14일
에 온도가 높았음을 위 라인 그래프 보다 쉽게 확인 할 수 있습니다.
[참고] 객체 선언바방식을 활용한 색상그래프 작성 코드는 아래와 같습니다.
In [7]:
import matplotlib.pyplot as plt
import numpy as np
# Create a sample color image represented as a NumPy array
# Replace this with your own image data
image_data = np.random.random((200, 300, 3)) # Replace with your image shape
# Create a figure and axis
fig, ax = plt.subplots()
# Display the image
ax.imshow(image_data)
# Add a colorbar to show the color scale
cbar = ax.figure.colorbar(ax.images[0], ax=ax)
# Set labels for the colorbar
cbar.ax.set_ylabel('Color Intensity', rotation=-90, va="bottom")
# Set the title
ax.set_title('Color Image')
# Show the plot
plt.show()
반응형
'python' 카테고리의 다른 글
while와 iter 메서드를 활용하여 파이토치 데이터 로더 5개의 데이터 까지만 확인해 보는 방법 (0) | 2023.08.28 |
---|---|
파이토치 rnn계열 sequence length 순환 기능 제공 여부 확인 (0) | 2023.08.27 |
ConversionError: Failed to convert value(s) to axis units: (0) | 2023.08.26 |
argparse 복붙용 기본 코드 (0) | 2023.08.20 |
파이토치 모델 수정 (0) | 2023.08.19 |
댓글