Python - 分类气泡图

And*_*der 0 python matplotlib seaborn

我有一个 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
Run Code Online (Sandbox Code Playgroud)

我不能使用 matplotlib.scatter 因为它不接受分类输入并且创建假值也不起作用,因为它不是 n*n。或者我可以吗?我想不通。我发现 seaborn.stripplot 需要一个分类输入,但所有气泡的大小都相同,所以我被卡住了。

任何想法如何在python中创建这样的情节?非常感谢。

Imp*_*est 6

我认为scatter情节非常适合创建这种分类气泡图。

创建数据框:

import pandas as pd
df = pd.DataFrame([[.3,.2,.4],[.1,.4,.1]], columns=list("ABC"), index=list("XY"))
Run Code Online (Sandbox Code Playgroud)

选项 1:取消堆叠 DataFrame

dfu = df.unstack().reset_index()
dfu.columns = list("XYS")
Run Code Online (Sandbox Code Playgroud)

这将创建一个表

   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
Run Code Online (Sandbox Code Playgroud)

您可以按列绘制。由于散点的大小是点,因此需要将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()
Run Code Online (Sandbox Code Playgroud)

选项 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()
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,结果看起来都像

在此处输入图片说明