首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -绝对气泡图

Python -绝对气泡图
EN

Stack Overflow用户
提问于 2018-05-17 20:11:00
回答 1查看 5.5K关注 0票数 0

我有一个12x17的数据格式,并想要创建一个像下面这样的绝对气泡图:

https://i.stack.imgur.com/IvD58.png (来自Categorical bubble plot for mapping studies)

我的数据文件基本上是这样的:

代码语言:javascript
复制
#      A     B     C
# X   0.3   0.2   0.4
# Y   0.1   0.4   0.1

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

我怎么能在python中创造出这样一个情节呢?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-17 20:30:35

我认为scatter图非常适合于创建这种绝对的气泡图。

创建dataframe:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame([[.3,.2,.4],[.1,.4,.1]], columns=list("ABC"), index=list("XY"))

选项1:解堆栈DataFrame

代码语言:javascript
复制
dfu = df.unstack().reset_index()
dfu.columns = list("XYS")

这将创建一个类似于

代码语言:javascript
复制
   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,才能得到大气泡。

代码语言:javascript
复制
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,您可以创建一个由dataframe的列和索引组成的网格,这样就可以绘制平坦网格的散点图。同样,还需要将数据的值乘以一些大的数字。

代码语言:javascript
复制
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()

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50399802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档