Python 为什么热图颜色值显示为薄矩形条而不是正方形?

Python 为什么热图颜色值显示为薄矩形条而不是正方形?,python,pandas,matplotlib,heatmap,seaborn,Python,Pandas,Matplotlib,Heatmap,Seaborn,如何改进此热图的外观?为什么颜色值显示为薄矩形条带(中间有所有的空白)而不是正方形,或者这是根据数据文件通常发生的情况?这不是热图应该是什么样子 读这本书。您所要做的就是添加square=True关键字。默认情况下,此选项设置为False 在引擎盖下,seaborn正在调用matplotlib.pyplot.imshow,使用square关键字只设置Axes.set\u aspect('equal')。如果使用square=True效果太过极端,您可以尝试手动设置纵横比:ax.set\u a

如何改进此热图的外观?为什么颜色值显示为薄矩形条带(中间有所有的空白)而不是正方形,或者这是根据数据文件通常发生的情况?这不是热图应该是什么样子

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

在引擎盖下,seaborn正在调用
matplotlib.pyplot.imshow
,使用square关键字只设置
Axes.set\u aspect('equal')
。如果使用
square=True
效果太过极端,您可以尝试手动设置纵横比:
ax.set\u aspect(num)
其中
num
是一个描述生成矩形的高宽比的数字。

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


在引擎盖下,seaborn正在调用
matplotlib.pyplot.imshow
,使用square关键字只设置
Axes.set\u aspect('equal')
。如果使用
square=True
效果太过极端,您可以尝试手动设置纵横比:
ax.set\u aspect(num)
其中
num
是一个描述结果矩形的高宽比的数字。

您的数据看起来像什么?看起来您的数据集中缺少了很多x/y组合…我已经编辑了这些数据…请看一看…如果是这样的数据,应该使用什么来进行可视化表示?正如我所想,您的透视表主要由缺少的值组成-您在这里试图实现什么?我不认为问题出在热图上…看看Bokeh-这对你来说可能很有趣…你的数据是什么样的?看起来您的数据集中缺少了很多x/y组合…我已经编辑了这些数据…请看一看…如果是这样的数据,应该使用什么来进行可视化表示?正如我所想,您的透视表主要由缺少的值组成-您在这里试图实现什么?我不认为问题出在热图上……看看Bokeh的文章——这对你来说可能很有趣……检查和
square=True
讨论;)不幸的是,这就是热图的本质。然而,我简要地编辑了答案,描述了如何手动调整纵横比。我认为主要的OPs问题是数据量。。。有了一张热图,你可以画出所有的东西,没有重叠,这对这个DF来说太多了。我会选择不同颜色的散点图(比如Bokeh的颜色散点图)——我想它看起来会更好。不幸的是,Dropbox被我们的公司防火墙屏蔽了,所以我在回家之前无法下载OPs数据,之后我会尝试一下…@MaxU我认为OP只是试图以最简单的方式制作热图,而不是热图不适合这种数据量/数据类型/数据维度。事实上,我认为热图(2D柱状图)比散点图要好得多,尤其是当有大量数据存在显著重叠时。OP可以通过沿x轴适当分块来实现更好的纵横比,因此视觉清晰度更好。如果您可以利用大量数据制作的热图制作一个工作示例(或提供链接),这将非常有用。请查看和
square=True
讨论;)不幸的是,这就是热图的本质。然而,我简要地编辑了答案,描述了如何手动调整纵横比。我认为主要的OPs问题是数据量。。。有了一张热图,你可以画出所有的东西,没有重叠,这对这个DF来说太多了。我会选择不同颜色的散点图(比如Bokeh的颜色散点图)——我想它看起来会更好。不幸的是,Dropbox被我们的公司防火墙屏蔽了,所以我在回家之前无法下载OPs数据,之后我会尝试一下…@MaxU我认为OP只是试图以最简单的方式制作热图,而不是热图不适合这种数据量/数据类型/数据维度。事实上,我认为热图(2D柱状图)比散点图要好得多,尤其是当有大量数据存在显著重叠时。OP可以通过沿x轴进行适当的分块来实现更好的纵横比,从而实现视觉清晰度。如果您可以利用大量数据制作的热图制作一个工作示例(或提供链接),这将非常有用
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()