Python - Категориальный пузырьковый сюжет - PullRequest
0 голосов
/ 17 мая 2018

У меня есть кадр данных 12x17, и я хочу создать категориальный пузырьковый график, похожий на этот:

https://i.stack.imgur.com/IvD58.png (из Категориальный пузырьковый график для исследований картографирования )

Мой фрейм данных выглядит в основном так:

#      A     B     C
# X   0.3   0.2   0.4
# Y   0.1   0.4   0.1

Я не могу использовать matplotlib.scatter, потому что он не принимает категориальный ввод и создание фальшивых значений тоже не работает, потому что это не n * n,Или я могу?Я не мог понять это.Я нашел seaborn.stripplot, который принимает один категориальный ввод, но размер всех пузырьков одинаков, поэтому я застрял.

Есть идеи, как я мог бы создать такой сюжет в python?Большое спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Я думаю, что 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()

В обоих случаях результат будет выглядеть следующим образом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...