곱셈을 기억하는 구쿠를 시각화하는 포스터를 matplotlib로 작성

15919 단어 파이썬matplotlib
「쿠쿠」(쿠쿠)라고 있어요. 일본에서 아이들이 곱셈을 기억할 때의 녀석입니다.

"일이 있어, 니가가, 씨가 씨,"라고 녀석입니다.

곱셈을 기억하는데 99편은 편리합니다만, 「어로만 기억해도 안 된다. 곱셈의 의미를 이해하지 않으면.」라고 하는 의견을 들었으므로, 곱셈의 의미도 아울러 이해할 수 있는 포스터를 Python matplotlib로 만들어 보았습니다. 코딩에 필요한 시간은 약 30분.

일본어 지원 matplotlib 설치 및 가져 오기


!pip install japanize-matplotlib
Collecting japanize-matplotlib
[?25l  Downloading https://files.pythonhosted.org/packages/aa/85/08a4b7fe8987582d99d9bb7ad0ff1ec75439359a7f9690a0dbf2dbf98b15/japanize-matplotlib-1.1.3.tar.gz (4.1MB)
[K     |████████████████████████████████| 4.1MB 5.5MB/s 
[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from japanize-matplotlib) (3.2.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (1.3.1)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (2.8.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (0.10.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (2.4.7)
Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (1.19.5)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)
Building wheels for collected packages: japanize-matplotlib
  Building wheel for japanize-matplotlib (setup.py) ... [?25l[?25hdone
  Created wheel for japanize-matplotlib: filename=japanize_matplotlib-1.1.3-cp36-none-any.whl size=4120276 sha256=642a1577ef5e695d7ef7a5fc14e07ad45d62ab853ca64da221873f69938f3e6c
  Stored in directory: /root/.cache/pip/wheels/b7/d9/a2/f907d50b32a2d2008ce5d691d30fb6569c2c93eefcfde55202
Successfully built japanize-matplotlib
Installing collected packages: japanize-matplotlib
Successfully installed japanize-matplotlib-1.1.3
import matplotlib.pyplot as plt
import japanize_matplotlib 

구구의 포스터 그리기


fig, axes = plt.subplots(nrows=9, ncols=9, figsize=(16, 16))
for x in range(9):
    for y in range(9):
        axes[y][x].axis("off")
        axes[y][x].set_aspect("equal")
        axes[y][x].set_title("{} x {} = {}".format(x + 1, y + 1, (x + 1) * (y + 1)))
        axes[y][x].set_xlim([0, 11])
        axes[y][x].set_ylim([0, 11])
        X = []
        Y = []
        for i in range(x + 1):
            for j in range(y + 1):
                X.append(i + 2)
                Y.append(10 - j - 1)
        axes[y][x].scatter(X, Y)

plt.savefig("300_dpi_scatter.png", format="png", dpi=300)



곱셈 순서?



그런데, 곱셈의 차례를 신경쓰는 선생님들이 Twitter등에서 화제가 되고 있는 것 같습니다만, 이것에 대해서는 무엇인가 말해질까요?

쥐 버전



우리 아이들은 쥐 씨들을 사랑하기 때문에 쥐 버전도 만들어 보았습니다.
fig, axes = plt.subplots(nrows=9, ncols=9, figsize=(28, 28))
for x in range(9):
    for y in range(9):
        axes[y][x].axis("off")
        axes[y][x].set_aspect("equal")
        axes[y][x].set_title("{} x {} = {}".format(x + 1, y + 1, (x + 1) * (y + 1)), fontsize=20)
        axes[y][x].set_xlim([-1, 11])
        axes[y][x].set_ylim([-1, 11])
        X = []
        Y = []
        for i in range(x + 1):
            for j in range(y + 1):
                X.append(i + 2)
                Y.append(10 - j - 1)
        if (x + 1) * (y + 1) % 2 == 1:
            c = 'k'
        else:
            c = 'r'
        axes[y][x].scatter(X, Y, c=c, s=28, marker='o')
        axes[y][x].scatter([xx + 0.25 for xx in X], [yy + 0.25 for yy in Y], c=c, s=12, marker='o')
        axes[y][x].scatter([xx - 0.25 for xx in X], [yy + 0.25 for yy in Y], c=c, s=12, marker='o')

plt.savefig("300_dpi_scatter.png", format="png", dpi=300)



곱셈의 결과가 홀수라면 검정, 짝수라면 빨강으로 해 보았어. 하하♪

좋은 웹페이지 즐겨찾기