【问题标题】:Why are the heatmap color values appearing as thin rectangular strips instead of squares? [duplicate]为什么热图颜色值显示为细长的矩形条而不是正方形? [复制]
【发布时间】:2016-10-06 03:05:05
【问题描述】:

如何改善此热图的外观?为什么颜色值显示为细长的矩形条(中间有所有空白)而不是正方形,或者这取决于数据文件通常会发生什么?这不是热图应该的样子。

Data

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "distributions")))

data = pd.read_csv('dvAng_heatmap.dat',sep='\s',engine='python')
data2 = pd.pivot_table(data.round(2),values='k',index='g',columns='h')

mask = np.isnan(data2)

sns.set(style="white")

xtics = 20
ytics = 10
cmap = "jet"
vmin = None
vmax = None

ax = sns.heatmap(data2, xticklabels=xtics, yticklabels=ytics, mask=mask, linewidths=0, cbar=True, robust=False,cmap=cmap, vmin=vmin, vmax=vmax)

ax.invert_yaxis()

plt.title('Heatmap')
plt.xlabel('angle')
plt.ylabel('separation')

plt.savefig('Heatmap.png', transparent=True)

sns.plt.show()

【问题讨论】:

  • 您的数据是什么样的?看来您的数据集中缺少很多 x/y 组合...
  • 我已经编辑以包含数据...请看一下...如果是这样的数据,应该使用什么来进行视觉表示?
  • 尽管如此,您的数据透视表主要包含缺失值 - 您想在这里实现什么?我认为问题不在于热图......
  • 看看来自 Bokeh 的 color_scatter - 这对你来说可能很有趣......

标签: python pandas matplotlib heatmap seaborn


【解决方案1】:

阅读documentation。您所要做的就是添加square=True 关键字。默认情况下,此选项设置为 False。

在后台,seaborn 调用 matplotlib.pyplot.imshow 并使用 square 关键字设置 Axes.set_aspect('equal')。如果使用square=True 的效果过于极端,您可以尝试手动设置纵横比:ax.set_aspect(num) 其中num 是描述生成的矩形的高宽比的数字。

【讨论】:

  • 查看previous OPs questionsquare=True 讨论;)
  • 不幸的是,这就是热图的本质。但是,我简要编辑了答案以描述如何手动调整纵横比。
  • 我认为主要的 OPs 问题是数据量......使用热图可以绘制所有内容,没有重叠,这对于这个 DF 来说太多了。我会选择不同颜色的散点图(比如 Bokeh 的 color_scatter)——我想它看起来会好很多。不幸的是,Dropbox 被我们公司的防火墙阻止了,所以我在回家之前无法下载 OPs 数据,之后我会试一试...
  • @MaxU 我认为 OP 只是试图以最幼稚的方式制作热图,而不是热图不适合这种数据量/数据类型/数据维度。事实上,我认为热图(2D 直方图)恰好在有大量重叠的数据时比散点图更好。 OP 可以通过沿 x 轴正确分箱来获得更好的纵横比,从而获得更好的视觉清晰度。
  • 如果您可以使用基于大量数据的热图制作一个工作示例(或提供链接),那将非常棒(并且非常有帮助)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多