python-3.x Seaborn Complex Heatmap---在图块内绘制圆圈以表示复杂注解

7eumitmz  于 2023-01-18  发布在  Python
关注(0)|答案(2)|浏览(216)

我在python中有两个 Dataframe 。

data_A
Name  X  Y
A     1  0
B     1  1
C     0  0

data_B
Name  X  Y
A     0  1
B     1  1
C     0  1

我想重叠这些热图,其中如果在data_frame A中为1,则图块为紫色(或任何颜色),但如果在data_frame B中为1,则绘制圆(最好是第一个圆)。
例如,热图显示A[,X][1]为紫色,但两个数据框中均为1的热图显示为带点的紫色,C[,Y][3]只有一个点,而C[,X][3]则什么都没有。
我似乎可以用seaborn进行遮罩,并用不同的颜色绘制两个热图,但颜色差异不够清楚,用户无法简单地看到一个图块只有一个而不是两个。我认为用一个圆圈来表示一个矩阵中的正值会更好。
有人知道如何使用seaborn在热图上绘制圆圈吗?

wn9m85ua

wn9m85ua1#

要显示热图,你可以使用imshow图。要显示一些点,你可以使用scatter图。然后在同一个轴上绘制。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

dfA = pd.DataFrame([[1,0],[1,1],[0,0]], columns=list("XY"), index=list("ABC"))
dfB = pd.DataFrame([[0,1],[1,1],[0,1]], columns=list("XY"), index=list("ABC"))

assert dfA.shape == dfB.shape

x = np.arange(0,len(dfA.columns))
y = np.arange(0,len(dfB.index))
X,Y=np.meshgrid(x,y)

fig, ax = plt.subplots(figsize=(2.6,3))
ax.invert_yaxis()
ax.imshow(dfA.values, aspect="auto", cmap="Purples")

cond = dfB.values == 1
ax.scatter(X[cond], Y[cond], c="crimson", s=100)

ax.set_xticks(x)
ax.set_yticks(y)
ax.set_xticklabels(dfA.columns)
ax.set_yticklabels(dfA.index)
plt.show()

使用点在同一热图上显示多个数据集的替代方法还可以

dhxwm5r4

dhxwm5r42#

现在可以直接使用pythonPyComplexHeatmap绘制复杂热图:https://github.com/DingWB/PyComplexHeatmaphttps://github.com/DingWB/PyComplexHeatmap/blob/main/examples.ipynb
第一节第一节第一节第一节第一次

相关问题