我的目标是使用单列热图,但出于某种原因,如果我没有使用二维数组,我通常用于热图的代码并不起作用。
vec1 = np.asarray([1,2,3,4,5])
fig, ax = plt.subplots()
plt.imshow(vec1, cmap='jet')
我知道将单列矢量显示为热图是很奇怪的,但它对我来说是一个很好的视觉效果。我只想要一列彩色方块,我可以沿着y轴标记,以向人们显示排序的事物列表。
答案 0 :(得分:1)
您可以使用Seaborn库来执行此操作。在Seaborn中,您可以识别要绘制的特定列。在这种情况下,你的阵列。以下内容应该完成您想要的内容
vec1 = np.asarray([1,2,3,4,5])
fig, ax = plt.subplots()
seaborn.heatmap([vec1])
然后你就像在pyplotlib中一样,只需在热图上进行格式化。
答案 1 :(得分:0)
从previous answer开始,我想出了一种方法,该方法同时使用Seaborn和Matplotlib的transform来执行pavlov在其注释中要求的操作(即,即使在热图中交换轴Seaborn没有orientation
参数。
让我们从上一个答案开始:
vec1 = np.asarray([1,2,3,4,5])
sns = heatmap([vec1])
plt.show()
在单个矢量上使用热图会产生以下结果:
好,让我们将x轴替换为y轴。为此,我们可以使用Affine2D
变换,将其旋转90度。
from matplotlib import transforms
tr = transforms.Affine2D().rotate_deg(90)
让我们也对初始数组进行整形以使其类似于列向量:
vec2 = vec1.reshape(vec1.shape[0], 1)
现在,我们可以绘制热图并强制Matplotlib执行仿射变换:
sns.heatmap(vec2)
plt.show(tr)
结果图为:
现在,如果我们想将每一行强制为正方形,我们可以简单地使用square=True
参数:
sns.heatmap(vec2, square=True)
plt.show(tr)
这是最终结果:
希望有帮助!