首页 > 解决方案 > 将列表绘制为彩色方块 matplotlib

问题描述

我想以xs与热图相同的方式绘制一组列表。不同之处在于结果必须投影在实际ys轴上。

xs = [[0, 100.0, 0, 100.0, 0, 100.0, 0, 100.0], [0, 100.0, 0, 100.0, 0, 100.0, 0, 100.0], ...]

ys = [0.00000e+00 0.00000e+00 4.90000e-02 -4.00000e-03 4.30000e-02 2.00000e-02 -8.00000e-03 -1.58000e-01 ...]

列表的每个值xs都应根据其值表示为不同颜色的正方形(例如,浅蓝色表示 0,深蓝色表示 100)。如果两个xs点具有相同ys的 ,则必须绘制最近的值。

ys我正在尝试在用作 y 轴的 matplotlib 子图上绘制结果。我尝试过使用 seaborn 热图,视觉结果正是我想要的,但我没有设法将其ys用作我的 y 轴。 使用 seaborn 热图绘制结果

编辑:这是我拥有的和想要获得的示例。

例子

我现在使用的是:sns.heatmap(xs,cbar=False,ax=axs[col])作为axs[col]应该绘制我的“热图”的子图。

标签: pythonmatplotlibseaborn

解决方案


如果您考虑使用pandasDataFrame,那么您可以利用drop_duplicates()为每个 y 值仅保留一行。然后只需调用sns.heatmap()过滤后的数据框即可:

ys = [150,150,151,152,153,153,154]
xs = np.random.choice([0,50,100], size=(len(ys),8))
df = pd.DataFrame(xs, index=ys)
df['ys'] = ys
df2 = df.drop_duplicates(subset='ys', keep='last').set_index('ys')
sns.heatmap(df2, cmap='Blues')

在此处输入图像描述


推荐阅读