python:具有分类颜色和连续透明度的热图

问题描述 投票:0回答:1

我想用Python(seaborn、matplotlib等)制作一个具有二维信息的热图。我有一个想要分配给颜色的分类值,以及一个想要分配给透明度的连续变量(即 0-100 或 0-1 之间),因此每个框都有自己的颜色和透明度(或强度)。

例如:

colors = pd.DataFrame([['b','g','r'],['black','orange','purple'],['r','yellow','white']])
transparency = pd.DataFrame([[0.1,0.2,0.3],[0.9,0.1,0.2],[0.1,0.6,0.3]])

如何根据这些数据制作热图,使左上角的框颜色为蓝色,透明度为 10%(或不透明度为 10%,以两者为准),依此类推?

到目前为止,我最好的想法是将颜色转换为整数值,将它们添加到透明度值,然后制作自定义颜色图,其中每个整数具有不同的颜色,范围从白色到整数值之间的颜色。这听起来很复杂,我希望有一种内置的方法可以做到这一点。

有什么想法吗?

python matplotlib seaborn
1个回答
0
投票
您可以绘制单独的矩形,为每个矩形指定特定的颜色和透明度:

import matplotlib.pyplot as plt from matplotlib.patches import Rectangle, Patch import pandas as pd colors = pd.DataFrame([['b', 'g', 'r'], ['black', 'orange', 'purple'], ['r', 'yellow', 'white']]) transparency = pd.DataFrame([[0.1, 0.2, 0.3], [0.9, 0.1, 0.2], [0.1, 0.6, 0.3]]) fig, ax = plt.subplots() for i, (color_col, transp_col) in enumerate(zip(colors.columns, transparency.columns)): for j, (color, transp) in enumerate(zip(colors[color_col], transparency[transp_col])): ax.add_patch(Rectangle((i - 0.5, j - 0.5), 1, 1, facecolor=color, alpha=transp, edgecolor='none', lw=0)) ax.invert_yaxis() # start at the top ax.autoscale(enable=True, tight=True) # recalculate axis limits ax.set_xticks(range(len(colors.columns)), colors.columns) ax.set_yticks(range(len(colors.index)), colors.index) plt.show()

heatmap with variable transparency

© www.soinside.com 2019 - 2024. All rights reserved.