我有一个12x17的数据框,想要创建一个类似这样的分类气泡图:
https://i.stack.imgur.com/IvD58.png(来自Categorical bubble plot for mapping studies)
我的数据框基本上看起来像这样:
# A B C
# X 0.3 0.2 0.4
# Y 0.1 0.4 0.1
我不能使用matplotlib.scatter,因为它不需要分类输入,并且创建假值也不起作用,因为它不是n * n。或者我可以吗?我无法弄明白。我发现seaborn.stripplot有一个分类输入,但是所有气泡的大小都是一样的,所以我被卡住了。
我有什么想法可以在python中创建这样的情节?非常感谢。
答案 0 :(得分:2)
我认为scatter
图非常适合创建这种分类的泡泡图。
创建数据框:
import pandas as pd
df = pd.DataFrame([[.3,.2,.4],[.1,.4,.1]], columns=list("ABC"), index=list("XY"))
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()
使用例如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()
在这两种情况下,结果都是