首页 > 解决方案 > Pandas:绘制一个数据框,其右侧矩形根据数组的值着色

问题描述

我有一个 100 行 4 列的数据框。我有一个数组(大小 100,1),其中填充了介于 0 和 1 之间的值。我想绘制我的数据框,在其右侧有一个矩形,该矩形将根据特定行的数组值采用颜色(看我画的很差,数组是为了帮助理解我想要的)。我希望颜色是渐变的,其中 0 = 深蓝色,1 = 鲜红色。我知道如何创建颜色图,但这略有不同。您建议我使用哪个功能?

这是我用于绘图的一些代码:

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

rectangle_values = np.random.rand(100)

plt.figure(figsize=(15,15))
ax = sns.heatmap(df, cbar = None)

在此处输入图像描述)

标签: pandasdataframematplotlibplotseaborn

解决方案


我的解决方案是使用以19:1之类plot.subplots的参数创建两个图。width_ratios在左侧,您像往常一样绘制数据框,在右侧,您绘制矢量。请注意,我正在使用vminandvmax为向量设置所需的边界 (0, 1)。此外,对于请求的颜色,我使用的是MatPlotLib's RdBu(红色和蓝色地图),但需要将其反转以满足您的要求。您可以通过值确认颜色,在此运行中生成的随机值是[0.74, 0.96, 0.87, 0.50, 0.26].

df = pd.DataFrame(np.random.randint(0,5,size=(5, 4)), columns=list('ABCD'))

rectangle_values = pd.DataFrame(np.random.rand(5), columns=['foo'])

plt.subplots(1, 2, gridspec_kw={'width_ratios': [19, 1]})

plt.subplot(1, 2, 1)
sns.heatmap(df, cbar = None)

plt.subplot(1, 2, 2)
sns.heatmap(rectangle_values, cbar = None, cmap=plt.cm.get_cmap('RdBu').reversed(), vmin=0, vmax=1)

plt.show()

输出是:

在此处输入图像描述


推荐阅读