gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:21:32 34 4
gpt4 key购买 nike

我想用 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com