Matplolib 정규분포 그래프 연습
Matplotlib 정규분포 그래프 연습
책에 있는 그림을 Matplotlib로 그리면서, Matplotlib 연습을 해 보고자 한다.
여기서 배운 것들은
어떤 범위를 색상으로 채우는 것 : fill_between
Tick에 문자를 대체해서 넣는 방법 : set_xticks, set_xticklabels
축을 표시하지 않는 방법 : set_ytick([])
화살표와 문자를 넣는 방법 : annotate (근데, 이건 화살표를 어떻게 꺽어 넣는지는 잘 몰라서, 숫자를 계속 넣어보면서 대략 맞췄다.)
외곽에 표시되는 박스에서 각 선 안 보이게 하기 : ax.spines[‘right’].set_visible(False)
수직선 그리기 : vlines
화살촉 표시 : ax.plot(1, 0, “>k”, transform=ax.get_yaxis_transform(), clip_on=False)
fig, ax = plt.subplots(figsize=(10,5))
line, = ax.plot(arr_x, pdf, color='black', lw=1, alpha=0.8)
ax.fill_between(arr_x[104:496], pdf[104:496], color='gray',alpha=0.3) #arr_x[104] = -1.96, arr_x[496]=1.96
ax.set_ylim(0) # y축 한계를 0으로 지정해서 x축과 y측이 만나도록 함
text : 텍스트 넣기
"""
아래 set_xticks와 set_xticklabels는 먼저 set_xticks로 tick 표기할 위치를 잡고,
각 위치에 다른 Text로 대체를 하여 표기하는 방식
"""
ax.set_xticks([-1.96, 0, 1.96])
ax.set_xticklabels([r"$p-1.96\displaystyle\sqrt{\frac{pq}{n}}$", r"$p$", r"$p+1.96\displaystyle\sqrt{\frac{pq}{n}}$"])
ax.xaxis.set_tick_params(labelsize=20) #label font 크기 설정
"""
축 tick을 표시하지 않는 방법
ax.set_yticks([])
ax.set_xticks([])
"""
ax.set_yticks([])
ax.annotate(r'95\%', xy=(1,1), xytext=(2,1.5), size=17,
arrowprops=dict(arrowstyle="->",
connectionstyle="arc, angleA=0, angleB=37, armA=0, armB=70, rad=0"))
"""
ax.spines : 네모 박스 축 설정
ax.spines['right'].set_visible(False) : 오른쪽 축 안 보이게
"""
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['top'].set_visible(False)
"""
ax.vlines : 수직선 그리기
atplotlib.pyplot.vlines(x, # 수직선이 놓이는 x값
ymin, ymax, # 수직선의 처음과 끝
colors='k', # 수직선 색상
linestyles='solid', # 수직선 형태
label='', *, data=None, **kwargs)
"""
ax.vlines(-1.96, 0, pdf[104], colors='gray',linestyle=':')
ax.vlines(0, 0, pdf[300], colors='gray', linestyle=':')
ax.vlines(+1.96, 0, pdf[496], colors='gray', linestyle=':')
"""
x축에 화살표 표시
y축에 화살표 표시는 plot(0, 1, "^k")
"""
ax.plot(1, 0, ">k", transform=ax.get_yaxis_transform(), clip_on=False)
plt.text(0.99, -0.05, r'$\hat{p}$', horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, size=20)
plt.show()
Written on May 21, 2021