Я думаю, что scatter
сюжет идеально подходит для создания такого типа категориального пузырькового сюжета.
Создание фрейма данных:
import pandas as pd
df = pd.DataFrame([[.3,.2,.4],[.1,.4,.1]], columns=list("ABC"), index=list("XY"))
Вариант 1. Разблокировка фрейма данных
dfu = df.unstack().reset_index()
dfu.columns = list("XYS")
Это создает таблицу типа
X Y S
0 A X 0.3
1 A Y 0.1
2 B X 0.2
3 B Y 0.4
4 C X 0.4
5 C Y 0.1
, которую выможно построить по столбцам.Поскольку размеры разбросов являются точками, для получения больших пузырьков необходимо умножить столбец S
на некоторое большое число, например 5000.
import matplotlib.pyplot as plt
dfu["S"] *= 5000
plt.scatter(x="X", y="Y", s="S", data=dfu)
plt.margins(.4)
plt.show()
Вариант 2: создать сетку
Использованиенапример, NumPy, можно создать сетку из столбцов данных и индекса, чтобы затем можно было построить график рассеянной сетки.Опять же, нужно умножить значения в кадре данных на некоторое большое число.
import numpy as np
import matplotlib.pyplot as plt
x,y = np.meshgrid(df.columns, df.index)
df *= 5000
plt.scatter(x=x.flatten(), y=y.flatten(), s=df.values.flatten())
plt.margins(.4)
plt.show()
В обоих случаях результат будет выглядеть следующим образом: