SIR 모델의 일본어 표시

다음 페이지와 같은 것을 일본어 표시로 실시했습니다.
중학생도 알 수 있는 SIR 모델



sir01.py
#! /usr/bin/python

# ------------------------------------------------------------------
import matplotlib.pyplot as plt
import numpy as np
import  sys

# ------------------------------------------------------------------
def next_state(beta,nu,ss, ii, rr):
    beta_ss_ii = beta * ss * ii
    delta_ss = - beta_ss_ii
    delta_ii = beta_ss_ii - nu * ii
    ss = ss + delta_ss
    ii = ii + delta_ii
    if ss < 0:
        ss = 0
    if 1.0 < ii:
        ii = 1.0
    rr = 1.0 - ss - ii
    return ss, ii, rr
#
# ------------------------------------------------------------------
def main():
    beta = 0.5
    nu = 0.3
    period = 100

    sys.stderr.write("beta = %f\n" % beta)
    sys.stderr.write("nu = %f\n" % nu)

    results = []
    ii = 0.01
    rr = 0
    ss = 1 - ii - rr

    l_s = [ss]
    l_i = [ii]
    l_r = [rr]
    results.append([ss,ii,rr])
    r0 = beta*ss/nu

    print(ss, ii, rr)
    for t in range(period):
        ss, ii, rr = next_state(beta,nu,ss, ii, rr)
        results.append([ss,ii,rr])
        l_s.append(ss)
        l_i.append(ii)
        l_r.append(rr)
    print("R0:{}".format(r0))

    plt.rcParams["font.family"] = "TakaoExGothic"
    # plt.rcParams["font.family"] = "IPAGothic"

    plt.figure()
    plt.title("R0:{}".format(format(r0,".3f")))
    plt.xlabel('時間')
    plt.ylabel('比率')

    x = np.linspace(0, 100, period+1)
    plt.plot(x, l_s, label="未感染者")
    plt.plot(x, l_i, label="感染者")
    plt.plot(x, l_r, label="回復者")
    plt.legend()
    plt.show()
#
# ------------------------------------------------------------------
main()
# ------------------------------------------------------------------

글꼴 지정은 TakaoExGothic 또는 IPAGothic 모두 괜찮습니다.

Arch Linux에서 확인했습니다.
$ uname -a
Linux iwata 5.6.10-arch1-1 #1 SMP PREEMPT Sat, 02 May 2020 19:11:54 +0000 x86_64 GNU/Linux
$ python --version
Python 3.8.2

좋은 웹페이지 즐겨찾기