Я предлагаю использовать для этого модуль networkx
python; вы можете установить его из pip
или conda
следующим образом:
# pip
pip install networkx
# conda
conda install -c anaconda networkx
После установки вам необходимо использовать следующую функцию, которая возвращает график и его параметры на основе списка из трех значений в виде показано в вашем вопросе:
def create_graph(values):
G = nx.Graph()
G.add_edges_from([('a','b'),('a','c'), ('a','d')])
_sum = sum(values)
labels = {'a': _sum, 'b':values[0], 'c':values[1], 'd':values[2]}
sizes = [50 * _sum, 50*values[0], 50*values[1], 50*values[2]]
return G, labels, sizes
Теперь давайте посмотрим, как использовать эту функцию:
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
# create dummy data
df = pd.DataFrame({"A": [2, 42], "B": [41, 1], "C":[40, 27]})
# create subplot based on the number of rows in df
fig, axes = plt.subplots(nrows=df.shape[0], ncols=1, figsize=(10,10))
ax = axes.flatten()
# iterate over the rows and draw a graph for each one
for i, row in df.iterrows():
graph, labels, sizes = create_graph(row.values)
nx.draw(graph, node_size=sizes, labels=labels, ax=ax[i])
# show the result
plt.show()
Результатом предыдущего кода будет следующий график: