Я пытаюсь контролировать, какие потоки соединяются друг с другом, используя диаграмму Matplotlib Sankey. Я изменяю пример двух базовых систем.
Я думаю, что мое замешательство сводится к непониманию того, что это на самом деле означает:
Обратите внимание, что указано только одно соединение, но системы образуют схему, поскольку: (1) длины путей оправданы и (2) зеркалирование ориентации и упорядочения потоков.
Я сделал игрушечный пример, который использует один набор данных, а затем модифицирует его для вторых систем, чтобы убедиться, что все совпадают.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey
plt.rcParams["figure.figsize"] = (15,10)
system_1 = [
{"label": "1st", "value": 2.00, "orientation": 0},
{"label": "2nd", "value": 0.15, "orientation": -1},
{"label": "3rd", "value": 0.60, "orientation": -1},
{"label": "4th", "value": -0.10, "orientation": -1},
{"label": "5th", "value": 0.25, "orientation": -1},
{"label": "6th", "value": 0.25, "orientation": -1},
{"label": "7th", "value": 0.25, "orientation": -1},
{"label": "8th", "value": 0.25, "orientation": -1},
{"label": "9th", "value": 0.25, "orientation": -1}
]
system_2 = system_1[:4]
system_2.append({"label": "new", "value": -0.25, "orientation": 1})
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Where are all my cows?")
flows = [x["value"] for x in system_1]
labels = [x["label"] for x in system_1]
orientations=[x["orientation"] for x in system_1]
sankey = Sankey(ax=ax, unit="cow")
sankey.add(flows=flows,
labels=labels,
label='one',
orientations=orientations)
sankey.add(flows=[-x["value"] for x in system_2],
labels=[x["label"] for x in system_2],
label='two',
orientations=[-x["orientation"] for x in system_2],
prior=0,
connect= (0,0)
)
diagrams = sankey.finish()
diagrams[-1].patch.set_hatch('/')
plt.legend(loc='best')
plt.show()
Это дает мне:
Он должен объединить потоки с соответствующими ярлыками.
Я читал это и это, но они не помогают мне понять, что на самом деле происходит.