开发者社区> 问答> 正文

带有圆圈表示人口大小的热图

嗨,我想在Python中生成一个热图,类似于所示,其中圆圈的大小表示该单元格中样本的大小。我在seaborn的画廊里找了找,什么也没找到,我想我不能用matplotlib来做这件事。

问题来源StackOverflow 地址:/questions/59381273/heatmap-with-circles-indicating-size-of-population

展开
收起
kun坤 2019-12-28 13:53:15 750 0
1 条回答
写回答
取消 提交回答
  • 这是逆。虽然matplotlib可以做几乎所有的事情,但是seaborn只提供了一小部分选项。 因此,使用matplotlib,您可以绘制如下所示的圆形补丁集合。 注意:你也可以使用散点图,但是由于散点的大小是绝对单位,所以很难将它们缩放到网格中。

    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()
    
    2019-12-28 13:53:31
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
从数据看安全人才的热力图 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载