pav*_*lov 1 python plot heatmap
我的目标是拥有一个单列热图,但由于某种原因,如果我不使用二维数组,我通常用于热图的代码将无法工作。
vec1 = np.asarray([1,2,3,4,5])
fig, ax = plt.subplots()
plt.imshow(vec1, cmap='jet')
Run Code Online (Sandbox Code Playgroud)
我知道将单列向量显示为热图很奇怪,但对于我的目的而言,这是一个很好的视觉效果。我只想要一列彩色方块,我可以沿着 y 轴标记它们,以向人们显示事物的排名列表。
小智 5
您可以使用 Seaborn 库来执行此操作。在 Seaborn 中,您可以识别要绘制的特定列。在这种情况下,这就是你的数组。以下内容应该可以实现您想要的
vec1 = np.asarray([1,2,3,4,5])
fig, ax = plt.subplots()
seaborn.heatmap([vec1])
Run Code Online (Sandbox Code Playgroud)
然后,您只需像在 pyplotlib 中一样对该热图进行格式化即可。
http://seaborn.pydata.org/ generated/seaborn.heatmap.html
从前面的答案开始,我提出了一种方法,它使用 Seaborn 和 Matplotlib 的变换来执行 pavlov 在其注释中所要求的操作(即,即使 Seaborn 没有参数,也交换热图中的轴orientation
)。
我们从之前的回答开始:
vec1 = np.asarray([1,2,3,4,5])
sns = heatmap([vec1])
plt.show()
Run Code Online (Sandbox Code Playgroud)
在单个向量上使用热图会产生以下结果:
好吧,让我们交换 x 轴和 y 轴。为此,我们可以使用Affine2D
变换,应用 90 度的旋转。
from matplotlib import transforms
tr = transforms.Affine2D().rotate_deg(90)
Run Code Online (Sandbox Code Playgroud)
我们还重塑初始数组,使其类似于列向量:
vec2 = vec1.reshape(vec1.shape[0], 1)
Run Code Online (Sandbox Code Playgroud)
现在我们可以绘制热图并强制 Matplotlib 执行仿射变换:
sns.heatmap(vec2)
plt.show(tr)
Run Code Online (Sandbox Code Playgroud)
结果图是:
现在,如果我们想强制每一行都是正方形,我们可以简单地使用参数square=True
:
sns.heatmap(vec2, square=True)
plt.show(tr)
Run Code Online (Sandbox Code Playgroud)
这是最终结果:
希望能帮助到你!
归档时间: |
|
查看次数: |
10824 次 |
最近记录: |