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

我从此处提供的示例进行扩展。

但是,我不知道如何使用带有 PathCollector 的 NumPy 数组来创建一个热图,该热图生成一个包含 20 个变量(Term)的单列,圆圈表示大小(Number_Protein)和颜色(P_value_abs)。

到目前为止,这是我得到的地方,我们将不胜感激。

http://img3.sycdn.imooc.com/6491378b0001fae506510589.jpg

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()/2

circles = [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()


动漫人物
浏览 150回答 1
1回答

jeck猫

问题的确切目标有点难以猜测。这是一个尝试:import pandas as pdfrom matplotlib import pyplot as pltfrom matplotlib.collections import PatchCollectionimport numpy as npShared = 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() / 2circles = [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()这将创建一个图,圆的半径与“Number_Protein”成比例,颜色与“P_value_abs”相关。请注意,当颜色值不在零和一之间时,norm需要将原始值转换为该范围。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python