ทรีแมป

Visualize

ทรีแมป

ทรีแมปเป็นแผนภาพที่ใช้แสดงข้อมูลเชิงตัวเลขในรูปแบบหมวดหมู่แบบลำดับชั้น ตัวอย่างที่พบได้บ่อยคือฮีตแมปของ Nikkei 225 หรือ S&P 500 โน้ตบุ๊กนี้ใช้ squarify

คุณสามารถสร้างทรีแมปด้วย 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>隧穂セ。謳咲寢
0PBR80.20130.049.80
1GOOG1188.001588.0400.00
2FLNG70.90230.0159.10
3ZIM400.22630.1229.88
4GOGL120.2090.9-29.30
53466\n??????156.20147.0-9.20

กำหนดสีของทรีแมป #

ใช้สีเขียวสำหรับพื้นที่กำไร และสีแดงสำหรับพื้นที่ขาดทุน

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]

แสดงทรีแมป #

แสดงกำไร/ขาดทุนด้วยสี และใส่เปอร์เซ็นต์กำไร/ขาดทุนลงบนทรีแมป ตัวอักษรญี่ปุ่นไม่เพี้ยนเพราะมี 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()

ทรีแมปกำไร/ขาดทุน

เพิ่มการแสดงเงินสดในทรีแมป #

เพิ่มการแสดงเงินสดในทรีแมป โดยกำหนดให้เป็นสีเทา

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()

ทรีแมปพร้อมเงินสด