python - 带有圆圈表示人口规模的热图

标签 python matplotlib data-visualization seaborn

我想用 Python 生成一个热图,类似于所示的热图,其中圆圈的大小表示该单元格中样本的大小。我在seaborn的画廊中找不到任何东西,而且我认为我不能用matplotlib做到这一点。

example heatmap

最佳答案

这是相反的。虽然 matplotlib 几乎可以做所有事情,但 seaborn 只提供一小部分选项。 因此,使用 matplotlib,您可以绘制一个 PatchCollection 圆,如下所示。
注意:您同样可以使用散点图,但由于散点大小采用绝对单位,因此很难将它们缩放到网格中。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection

N = 10
M = 11
ylabels = ["".join(np.random.choice(list("PQRSTUVXYZ"), size=7)) for _ in range(N)]
xlabels = ["".join(np.random.choice(list("ABCDE"), size=3)) for _ in range(M)]

x, y = np.meshgrid(np.arange(M), np.arange(N))
s = np.random.randint(0, 180, size=(N,M))
c = np.random.rand(N, M)-0.5

fig, ax = plt.subplots()

R = s/s.max()/2
circles = [plt.Circle((j,i), radius=r) for r, j, i in zip(R.flat, x.flat, y.flat)]
col = PatchCollection(circles, array=c.flatten(), cmap="RdYlGn")
ax.add_collection(col)

ax.set(xticks=np.arange(M), yticks=np.arange(N),
       xticklabels=xlabels, yticklabels=ylabels)
ax.set_xticks(np.arange(M+1)-0.5, minor=True)
ax.set_yticks(np.arange(N+1)-0.5, minor=True)
ax.grid(which='minor')

fig.colorbar(col)
plt.show()

enter image description here

关于python - 带有圆圈表示人口规模的热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59381273/

相关文章:

r - 消除对基础 R 中包的需求?

python - Pip3 未与 python3 一起安装,异常情况?

python - 将数字添加到子图

Python 3.4 在生成部分(但不是全部)带有段错误 11 的 Cartopy map 时崩溃

matlab - 如何在matlab中使用fminunc时获取成本历史记录

macos - 有没有基于cocoa的数据可视化库?

javascript - 为什么在 Python 中我不能像在 JavaScript 中那样连接字符串和数字?

python - Django:除了临时 session 之外,如何在基于类的 View 中设置(永久)cookie?

python - 使用另一个数据帧同一列中的值更新数据帧中的列

python - 使用不同 matplotlib 版本绘图的差异