Ένα treemap είναι ένα διάγραμμα για την οπτικοποίηση αριθμητικών δεδομένων με ιεραρχικές κατηγορίες. Κλασικά παραδείγματα είναι οι θερμικοί χάρτες του Nikkei 225 ή του S&P 500. Αυτό το notebook χρησιμοποιεί το squarify.
Ένα treemap μπορεί επίσης να δημιουργηθεί με το plotly.・・ Treemap charts with Python - Plotly・・
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import squarify
np.random.seed(0) # Fix random numbers
labels = ["A" * i for i in range(1, 5)]
sizes = [i * 10 for i in range(1, 5)]
colors = ["#%02x%02x%02x" % (i * 50, 0, 0) for i in range(1, 5)]
plt.figure(figsize=(5, 5))
squarify.plot(sizes, color=colors, label=labels)
plt.axis("off")
plt.show()

Οπτικοποιηση του χαρτοφυλακιου μου #
Ας υποθέσουμε ότι έχω δεδομένα για την τιμή αγοράς και την τρέχουσα τιμή κάθε μετοχής που κατέχω. Με αυτά, θα δημιουργούσα έναν θερμικό χάρτη όπως το finviz.
Ας υποθέσουμε ότι διαβάζουμε τα παρακάτω δεδομένα από csv.
Τα δεδομένα που εμφανίζονται εδώ είναι φανταστικά.
import pandas as pd
data = [
["PBR", 80.20, 130.00],
["GOOG", 1188.0, 1588.0],
["FLNG", 70.90, 230.00],
["ZIM", 400.22, 630.10],
["GOGL", 120.20, 90.90],
["3466\n??????", 156.20, 147.00], # ??????????
]
df = pd.DataFrame(data)
df.columns = ["驫俶氛蜷・, "蜿門セ嶺セ。鬘・, "迴セ蝨ィ縺ョ萓。鬘・]
df["隧穂セ。謳咲寢"] = df["迴セ蝨ィ縺ョ萓。鬘・] - df["蜿門セ嶺セ。鬘・]
df.head(6)
plt.show()
| 驫俶氛蜷・/th> | 蜿門セ嶺セ。鬘・/th> | 迴セ蝨ィ縺ョ萓。鬘・/th> | 隧穂セ。謳咲寢 | |
|---|---|---|---|---|
| 0 | PBR | 80.20 | 130.0 | 49.80 |
| 1 | GOOG | 1188.00 | 1588.0 | 400.00 |
| 2 | FLNG | 70.90 | 230.0 | 159.10 |
| 3 | ZIM | 400.22 | 630.1 | 229.88 |
| 4 | GOGL | 120.20 | 90.9 | -29.30 |
| 5 | 3466\n?????? | 156.20 | 147.0 | -9.20 |
Ορισμος χρωματος για το treemap #
Πράσινο για κερδοφόρες περιοχές και κόκκινο για ζημιογόνες.
colors = []
percents = []
for p_or_l, oac in zip(df["????"], df["????"]):
percent = p_or_l / oac * 100
if p_or_l > 0:
g = np.min([percent * 255 / 100 + 100, 255.0])
color = "#%02x%02x%02x" % (0, int(g), 0)
colors.append(color)
else:
r = np.min([-percent * 255 / 100 + 100, 255])
color = "#%02x%02x%02x" % (int(r), 0, 0)
colors.append(color)
percents.append(percent)
print(df["驫俶氛蜷・"].values)
print(colors)
print(percents)
plt.show()
['PBR' 'GOOG' 'FLNG' 'ZIM' 'GOGL' '3466\n??????']
['#00ff00', '#00b900', '#00ff00', '#00f600', '#a20000', '#730000']
[62.094763092269325, 33.670033670033675, 224.4005641748942, 57.43840887511868, -24.376039933444257, -5.8898847631241935]
Εμφανιση treemap #
Ας εμφανίσουμε το κέρδος/ζημιά με χρώματα και το ποσοστό κέρδους/ζημιάς πάνω στο treemap.
Οι ιαπωνικοί χαρακτήρες δεν αλλοιώνονται επειδή χρησιμοποιείται import japanize_matplotlib στην αρχή.
current_prices = [cp for cp in df["迴セ蝨ィ縺ョ萓。鬘・"]]
labels = [
f"{name}\n{np.round(percent, 2)}・・".replace("-", "笆シ")
for name, percent in zip(df["驫俶氛蜷・"], percents)
]
plt.figure(figsize=(10, 10))
plt.rcParams["font.size"] = 18
squarify.plot(current_prices, color=colors, label=labels)
plt.axis("off")
plt.show()

Προσθηκη ενδειξης μετρητων στο treemap #
Ας προσθέσουμε και μια ένδειξη μετρητών στο treemap. Το χρώμα πρέπει να είναι γκρι.
plt.figure(figsize=(10, 10))
plt.rcParams["font.size"] = 18
squarify.plot(
current_prices + [3500], color=colors + ["#ccc"], label=labels + ["?????"]
)
plt.axis("off")
plt.show()
