import matplotlib.pyplot as plt
from matplotlib import animation
from random import uniform

def next_frame(i):
    circle.center = (5 + i % 2, 5 + i % 2)
    circle.radius=i
    rect.xy = (1 + i, 1 + i)
    rect.set_height(i)
    for i in range(len(ys)):
        d = uniform(-0.05, 0.05)
        ys[i] += d
        if ys[i] <= 0:
            ys[i] = 0
        elif ys[i] >= 10:
            ys[i] = 10

    points.set_data(xs, ys)


if __name__ == "__main__":
    fig, axes = plt.subplots(nrows=2, ncols=2)
    axes[0][0].plot([1, 2, 1])
    axes[0][0].grid(True)
    axes[1][1].plot(list(range(10)), list(range(10)), linestyle='-.', marker='x', color='red')
    axes[1][1].set_yscale('symlog')
    axes[0][1].set(xlim=(0, 11), ylim=(0, 11))
    axes[0][1].set_aspect('equal')
    axes[0][1].set(xlim=(0, 11), ylim=(0, 11))

    circle = plt.Circle((5, 5), 2, color='b')
    rect = plt.Rectangle((1, 1), 1, 1, color='r', alpha=0.5)
    axes[0][1].add_patch(circle)
    axes[0][1].add_patch(rect)

    xs = list(range(101))
    ys = [5] * 101

    axes[1][0].set(xlim=(0, 100), ylim=(0, 10))
    points, = axes[1][0].plot(xs, ys)

    anim = animation.FuncAnimation(fig, next_frame, frames=10, repeat=True, interval=100)
    plt.show()
