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()

Matplotlib Graph

Written on May 21, 2021