positive and negative changes

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.colors import LinearSegmentedColormap

cmap = LinearSegmentedColormap.from_list("rg", ["r", "w", "g"], N=256)

data = {
    "$AAAA": {
        "EPS": [0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3, 0.4],
        "Revenue": [-0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3, 0.4],
    },
    "$BBBB": {
        "EPS": [0.3, 0.1, -0.3, 0.1, 0.1, -0.2, 0.3, 0.4],
        "Revenue": [0.1, -0.2, 0.3, 0.4, 0.3, 0.1, -0.3, 0.1],
    },
    "$CCCC": {
        "EPS": [0.1, 0.4, 0.5, 0.2, 0.1, 0.4, 0.5, 0.2],
        "Revenue": [0.1, -0.2, 0.3, 0.4, 0.5, 0.2, 0.1, 0.2],
    },
}

n_companies = 3
n_times = 8

Plot

y_index = 0
y_label = []

fig = plt.figure(figsize=(12, 6))
ax = plt.gca()
ax.set_facecolor("#fefefe")

for company_name, eps_rev in data.items():
    d = -0.1
    for name, v in eps_rev.items():
        x = np.arange(n_times)
        y = [y_index + d for _ in range(n_times)]
        plt.scatter(x, y, c=v, s=500, cmap=cmap)

        for xi, vi in zip(x, v):
            plt.text(xi + 0.15, y_index + d, f"{vi}%", fontsize=15)
        d += 0.2

    y_label.append(company_name)
    y_index += 1

plt.xticks(
    np.arange(n_times), labels=[f"2022/{m+1}" for m in np.arange(n_times)], fontsize=14
)
plt.yticks(np.arange(n_companies), labels=y_label, fontsize=20)
plt.grid(axis="x", color="#ddd")

png

Comments

(Comments will appear after approval)