Matpltlib I¶
matplotlib¶
matplotlib는 많은 함수와 인자가 있어서 document확인해 본다. https://matplotlib.org/3.1.1/tutorials/introductory/pyplot.html
- pyplot객체를 사용하여 데이터를 표시
- pyplot객체에 그래프들을 쌓은 다음 flush
In [1]:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
In [2]:
X=range(100)
Y=[val**2 for val in X]
plt.plot(X,Y)
plt.show()
- 최대 단점 argumnet를 kwargs받음
- 고정된 argument가 없어서
alt
+tab
으로 확인이 어려움
In [3]:
X_1=range(100)
Y_1=[np.cos(val) for val in X_1]
X_2=range(100)
Y_2=[np.sin(val) for val in X_2]
plt.plot(X_1,Y_1)
plt.plot(X_2,Y_2)
plt.show()
- Graph는 원래 figure객체에 생성됨
- pyplot객체 사용시, 기본 figure에 그래프가 그려짐
In [4]:
fig = plt.figure() # figure 반환
fig.set_size_inches(10, 10) # 크기지정
ax_1 = fig.add_subplot(2, 2, 1) # 두개의 plot 생성
ax_2 = fig.add_subplot(2, 2, 2) # 두개의 plot 생성
ax_3 = fig.add_subplot(2, 1, 2) # 두개의 plot 생성
ax_1.plot(X_1, Y_1, c="b") # 첫번째 plot
ax_2.plot(X_2, Y_2, c="g") # 두번째 plot
ax_3.plot(X_1, Y_1)
plt.show() # show & flush
In [5]:
fig = plt.figure()
fig.set_size_inches(10, 8) # size 설정
# plt.style.use("ggplot") # 스타일적용
ax = []
colors = ["b", "g", "r", "c", "m", "y", "k"]
for i in range(1, 7):
ax.append(fig.add_subplot(2, 3, i)) # 두개의 plot 생성
X_1 = np.arange(50)
Y_1 = np.random.rand(50)
c = colors[np.random.randint(1, len(colors))]
ax[i - 1].plot(X_1, Y_1, c=c)
set color¶
c
또는color
속성을 사용float
: 흑백, rgb color, predefined color 사용- https://matplotlib.org/examples/lines_bars_and_markers/linestyles.html
In [6]:
X=np.arange(100)
Y=X**2
X_1=X
Y_1=Y+2000
plt.plot(X,Y,color='#eeefff')
plt.plot(X_1,Y_1,color='r')
Out[6]:
In [7]:
plt.plot(X,Y,c='b',linestyle='dashed')
plt.plot(X_1,Y_1,color='r',ls='dotted')
Out[7]:
In [8]:
plt.plot(X,Y,c='b',linestyle='dashed')
plt.plot(X_1,Y_1,color='r',ls='dotted')
#### set title####
plt.title('Two curves')
Out[8]:
In [9]:
plt.plot(X,Y,c='b',linestyle='dashed')
plt.plot(X_1,Y_1,color='r',ls='dotted')
#### set title####
plt.title("$y = ax^{2} + b$")
plt.show()
In [10]:
plt.plot(X,Y,c='b',linestyle='dashed',label='curve_1')
plt.plot(X_1,Y_1,color='r',ls='dotted',label='curve_2')
#### set legend ####
plt.legend(shadow=True,fancybox=True,loc='lower right')
Out[10]:
set grid & xylim¶
- Graph 보조선을 긋는 grid와 xy축 범위 한계를 지정
- ggplot 스타일 적용
- https://matplotlib.org/3.1.1/gallery/style_sheets/style_sheets_reference.html
In [11]:
plt.plot(X,Y,c='b',linestyle='dashed',label='curve_1')
plt.plot(X_1,Y_1,color='r',ls='dotted',label='curve_2')
#### set title####
plt.title("$y = ax^{2} + b$")
#### set legend ####
plt.legend(shadow=True,fancybox=True,loc='lower right')
#### set grid & xylim ####
plt.grid(True, lw=0.4, ls="--", c=".90")
plt.xlim(-100, 200)
plt.ylim(0, 4000)
Out[11]:
In [12]:
plt.style.use('ggplot')
In [13]:
plt.plot(X,Y,c='b',linestyle='dashed',label='curve_1')
plt.plot(X_1,Y_1,color='r',ls='dotted',label='curve_2')
#### set title####
plt.title("$y = ax^{2} + b$")
#### set legend ####
plt.legend(shadow=True,fancybox=True,loc='lower right')
#### set grid & xylim ####
plt.xlim(-100, 200)
plt.ylim(0, 4000)
Out[13]:
In [14]:
plt.style.use('default')
In [15]:
plt.plot(X,Y,c='b',linestyle='dashed',label='curve_1')
plt.plot(X_1,Y_1,color='r',ls='dotted',label='curve_2')
#### set text & annotate ####
plt.text(50, 1600, "curve_1")
plt.annotate(
"curve_2",
xy=(30, 2900), # 화살표 끝점
xytext=(-25, 3000), # text도 나타내고 화살표의 시작점
arrowprops=dict(facecolor="black", shrink=0.05))
#### set title####
plt.title("$y = ax^{2} + b$")
#### set legend ####
plt.legend(shadow=True,fancybox=True,loc='lower right')
#### set grid & xylim ####
plt.xlim(-100, 200)
plt.ylim(0, 4000)
Out[15]:
In [16]:
fig = plt.figure() # figure 반환
fig.set_size_inches(5, 3) # 크기지정
plt.plot(X,Y,c='b',linestyle='dashed',label='curve_1')
plt.plot(X_1,Y_1,color='r',ls='dotted',label='curve_2')
#### set title####
plt.title("$y = ax^{2} + b$")
#### set legend ####
plt.legend(shadow=True,fancybox=True,loc='lower right')
#### set grid & xylim ####
plt.grid(True, lw=0.4, ls="--", c=".90")
plt.xlim(-100, 200)
plt.ylim(0, 4000)
#### set label ####
plt.xlabel("x_line")
plt.ylabel("y_line")
Out[16]:
In [17]:
plt.plot(X,Y,c='b',linestyle='dashed')
plt.plot(X_1,Y_1,color='r',ls='dotted')
#### set title####
plt.title("$y = ax^{2} + b$")
#### save ####
plt.savefig('test.png')
예시¶
In [18]:
df = pd.read_csv("./data/phone_data.csv")
df.head()
Out[18]:
월별 통화량 데이터 총합¶
In [19]:
result = df.groupby(["month"])["duration"].sum()
result
Out[19]:
In [20]:
fig = plt.figure(figsize=(5,3)) # figure 반환
plt.plot(result.index, result, color="b", linestyle="dashed")
plt.title("Durations per month")
plt.show()
일별 네트워크별 데이터의 총량을 다중 plot으로 작성¶
In [21]:
df["day"]=df["date"].str[:9]
df.head()
Out[21]:
In [22]:
result=df.groupby(["network", "day"])["duration"].sum().reset_index()
result.head()
Out[22]:
In [23]:
result["network"].unique().tolist()
Out[23]:
In [24]:
result[result["network"] == "data"].head()
Out[24]:
In [25]:
fig = plt.figure()
fig.set_size_inches(12, 10) # size 설정
network_types = result["network"].unique().tolist()
ax = []
for i in range(1, 7):
ax.append(fig.add_subplot(2, 3, i)) # 두개의 plot 생성
network_name = network_types[i - 1]
plt.title(network_name)
X_1 = result[result["network"] == network_name]["day"]
Y_1 = result[result["network"] == network_name]["duration"]
ax[i - 1].get_xaxis().set_visible(False)
ax[i - 1].plot(X_1, Y_1)
get_xaxis().set_visible(False)
의 설정을 통해서 x축의 값을 안보이게 한다.
'AI > 이론' 카테고리의 다른 글
베이즈 통계학 (0) | 2021.02.01 |
---|---|
통계학 (0) | 2021.01.29 |
seaborn (0) | 2021.01.29 |
matplotlib II (0) | 2021.01.29 |
확률론 맛보기 (0) | 2021.01.28 |
Pandas IV (0) | 2021.01.28 |
Pandas III (0) | 2021.01.28 |
딥러닝 학습방법 이해하기 (0) | 2021.01.27 |