为了账号安全,请及时绑定邮箱和手机立即绑定

具有不同大小圆圈的单列热图

具有不同大小圆圈的单列热图

动漫人物 2023-06-20 13:21:41
我从此处提供的示例进行扩展。但是,我不知道如何使用带有 PathCollector 的 NumPy 数组来创建一个热图,该热图生成一个包含 20 个变量(Term)的单列,圆圈表示大小(Number_Protein)和颜色(P_value_abs)。到目前为止,这是我得到的地方,我们将不胜感激。ylabels = Shared["Term"]xlabels = ["Overlap"]x, y = np.meshgrid(1, 20)s = Shared["Number_Protein"]c = Shared["P_value_abs"]fig, ax = plt.subplots()R = s/s.max()/2circles = [plt.Circle((j,i), radius=r) for r, j, i in zip(R, x, y)]col = PatchCollection(circles, array=c, cmap="coolwarm")ax.add_collection(col)ax.set(xticklabels=xlabels, yticklabels=ylabels)fig.colorbar(col)plt.show()
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

问题的确切目标有点难以猜测。这是一个尝试:


import pandas as pd

from matplotlib import pyplot as plt

from matplotlib.collections import PatchCollection

import numpy as np


Shared = pd.DataFrame({'Term': ['Term{i}' for i in range(1, 7)],

                       'Number_Protein': np.random.randint(150, 220, 6),

                       'P_value_abs': np.random.uniform(50, 95, 6)})

ylabels = Shared["Term"]

xlabels = ["Overlap"]


s = Shared["Number_Protein"]

c = Shared["P_value_abs"]

norm = plt.Normalize(c.min(), c.max())


fig, ax = plt.subplots()


R = s / s.max() / 2

circles = [plt.Circle((0, i), radius=r) for i, r in enumerate(R)]

col = PatchCollection(circles, array=c, cmap="coolwarm", norm=norm)

ax.add_collection(col)


ax.set_xticks([0])

ax.set_xticklabels(xlabels)

ax.set_yticks(range(len(R)))

ax.set_yticklabels(ylabels)

ax.set_xlim(-0.5, 0.5)

ax.set_ylim(-0.5, len(ylabels)-0.5 )

ax.set_aspect('equal')

fig.colorbar(col)

plt.show()

//img1.sycdn.imooc.com/649137a1000107ca03250238.jpg

这将创建一个图,圆的半径与“Number_Protein”成比例,颜色与“P_value_abs”相关。请注意,当颜色值不在零和一之间时,norm需要将原始值转换为该范围。



查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信